galaxy-commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
June 2014
- 1 participants
- 233 discussions
commit/galaxy-central: greg: Fixes for the Tool Shed API POST and PUT requests that were broken when attempting to handle urllib2 not handling 307 redirects. The initial attempt at handling the urllib2 weakness made a call to urllib2.get_url() which turns POST requests into GET requests as a side-effect.
by commits-noreply@bitbucket.org 10 Jun '14
by commits-noreply@bitbucket.org 10 Jun '14
10 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/47e32138de3d/
Changeset: 47e32138de3d
User: greg
Date: 2014-06-10 16:33:48
Summary: Fixes for the Tool Shed API POST and PUT requests that were broken when attempting to handle urllib2 not handling 307 redirects. The initial attempt at handling the urllib2 weakness made a call to urllib2.get_url() which turns POST requests into GET requests as a side-effect.
Affected #: 3 files
diff -r 0ed41ad6e8b803867947c4d28daef882cf411773 -r 47e32138de3d0a9debf25cb6b59c967b647af84e lib/galaxy/webapps/tool_shed/api/repositories.py
--- a/lib/galaxy/webapps/tool_shed/api/repositories.py
+++ b/lib/galaxy/webapps/tool_shed/api/repositories.py
@@ -30,7 +30,7 @@
@web.expose_api
def add_repository_registry_entry( self, trans, payload, **kwd ):
"""
- POST /api/repository_revisions/add_repository_registry_entry
+ POST /api/repositories/add_repository_registry_entry
Adds appropriate entries to the repository registry for the repository defined by the received name and owner.
:param key: the user's API key
@@ -65,7 +65,7 @@
# Update the repository registry.
trans.app.repository_registry.add_entry( repository )
response_dict[ 'status' ] = 'ok'
- response_dict[ 'message' ] = 'Entries for repository %s owned by %s have been added to the Tool Shed repository registry..' \
+ response_dict[ 'message' ] = 'Entries for repository %s owned by %s have been added to the Tool Shed repository registry.' \
% ( name, owner )
return response_dict
@@ -315,7 +315,7 @@
@web.expose_api
def remove_repository_registry_entry( self, trans, payload, **kwd ):
"""
- POST /api/repository_revisions/add_repository_registry_entry
+ POST /api/repositories/remove_repository_registry_entry
Removes appropriate entries from the repository registry for the repository defined by the received name and owner.
:param key: the user's API key
diff -r 0ed41ad6e8b803867947c4d28daef882cf411773 -r 47e32138de3d0a9debf25cb6b59c967b647af84e lib/tool_shed/scripts/api/common.py
--- a/lib/tool_shed/scripts/api/common.py
+++ b/lib/tool_shed/scripts/api/common.py
@@ -11,31 +11,43 @@
from tool_shed.util import common_util
from tool_shed.util import hg_util
+def build_request_with_data( url, data, api_key, method ):
+ """Build a request with the received method."""
+ protocol = common_util.get_protocol_from_tool_shed_url( url )
+ if protocol == 'http':
+ opener = urllib2.build_opener( urllib2.HTTPHandler )
+ elif protocol == 'https':
+ opener = urllib2.build_opener( urllib2.HTTPSHandler )
+ url = make_url( url, api_key=api_key, args=None )
+ request = urllib2.Request( url, headers={ 'Content-Type': 'application/json' }, data=json.dumps( data ) )
+ request_method = request.get_method()
+ if request_method != method:
+ request.get_method = lambda: method
+ return opener, request
+
def delete( api_key, url, data, return_formatted=True ):
"""
Sends an API DELETE request and acts as a generic formatter for the JSON response. The
'data' will become the JSON payload read by the Tool Shed.
"""
try:
- url = make_url( url, api_key=api_key, args=None )
- # Fix for handling 307 redirect not being handled nicely by urllib2.urlopen when the
- # urllib2.Request has data provided.
- url = urllib2.urlopen( urllib2.Request( url ) ).geturl()
- req = urllib2.Request( url, headers = { 'Content-Type': 'application/json' }, data = json.dumps( data ))
- req.get_method = lambda: 'DELETE'
- r = json.loads( urllib2.urlopen( req ).read() )
+ opener, request = build_request_with_data( url, data, api_key, 'DELETE' )
+ delete_request = opener.open( request )
+ response = json.loads( delete_request.read() )
except urllib2.HTTPError, e:
if return_formatted:
print e
print e.read( 1024 )
sys.exit( 1 )
else:
- return 'Error. '+ str( e.read( 1024 ) )
- if not return_formatted:
- return r
- print 'Response'
- print '--------'
- print r
+ return dict( status='error', message=str( e.read( 1024 ) ) )
+ if return_formatted:
+ return response
+ print 'Response'
+ print '--------'
+ print response
+ else:
+ return response
def display( url, api_key=None, return_formatted=True ):
"""Sends an API GET request and acts as a generic formatter for the JSON response."""
@@ -176,25 +188,21 @@
def post( url, data, api_key=None ):
"""Do the POST."""
- url = make_url( url, api_key=api_key, args=None )
- # Fix for handling 307 redirect not being handled nicely by urllib2.urlopen when the
- # urllib2.Request has data provided.
- # NOTE: This approach does *not* work -- this makes an extra GET request to the
- # base collection with the method as the ID. That will never decode
- # correctly.
- # url = urllib2.urlopen( urllib2.Request( url ) ).geturl()
- req = urllib2.Request( url, headers = { 'Content-Type': 'application/json' }, data = json.dumps( data ) )
- return json.loads( urllib2.urlopen( req ).read() )
+ try:
+ opener, request = build_request_with_data( url, data, api_key, 'POST' )
+ post_request = opener.open( request )
+ return json.loads( post_request.read() )
+ except urllib2.HTTPError, e:
+ return dict( status='error', message=str( e.read( 1024 ) ) )
def put( url, data, api_key=None ):
"""Do the PUT."""
- url = make_url( url, api_key=api_key, args=None )
- # Fix for handling 307 redirect not being handled nicely by urllib2.urlopen when the
- # urllib2.Request has data provided.
- url = urllib2.urlopen( urllib2.Request( url ) ).geturl()
- req = urllib2.Request( url, headers = { 'Content-Type': 'application/json' }, data = json.dumps( data ))
- req.get_method = lambda: 'PUT'
- return json.loads( urllib2.urlopen( req ).read() )
+ try:
+ opener, request = build_request_with_data( url, data, api_key, 'PUT' )
+ put_request = opener.open( request )
+ return json.loads( put_request.read() )
+ except urllib2.HTTPError, e:
+ return dict( status='error', message=str( e.read( 1024 ) ) )
def submit( url, data, api_key=None, return_formatted=True ):
"""
@@ -202,7 +210,7 @@
'data' will become the JSON payload read by the Tool Shed.
"""
try:
- r = post( url, data, api_key=api_key )
+ response = post( url, data, api_key=api_key )
except urllib2.HTTPError, e:
if return_formatted:
print e
@@ -211,13 +219,13 @@
else:
return dict( status='error', message=str( e.read( 1024 ) ) )
if not return_formatted:
- return r
+ return response
print 'Response'
print '--------'
- if type( r ) == list:
+ if type( response ) == list:
# Currently the only implemented responses are lists of dicts, because submission creates
# some number of collection elements.
- for i in r:
+ for i in response:
if type( i ) == dict:
if 'url' in i:
print i.pop( 'url' )
@@ -230,7 +238,7 @@
else:
print i
else:
- print r
+ print response
def update( api_key, url, data, return_formatted=True ):
"""
@@ -238,16 +246,17 @@
'data' will become the JSON payload read by the Tool Shed.
"""
try:
- r = put( url, data, api_key=api_key )
+ response = put( url, data, api_key=api_key )
except urllib2.HTTPError, e:
if return_formatted:
print e
print e.read( 1024 )
sys.exit( 1 )
else:
- return 'Error. ' + str( e.read( 1024 ) )
- if not return_formatted:
- return r
- print 'Response'
- print '--------'
- print r
+ return dict( status='error', message=str( e.read( 1024 ) ) )
+ if return_formatted:
+ print 'Response'
+ print '--------'
+ print response
+ else:
+ return response
diff -r 0ed41ad6e8b803867947c4d28daef882cf411773 -r 47e32138de3d0a9debf25cb6b59c967b647af84e lib/tool_shed/util/common_util.py
--- a/lib/tool_shed/util/common_util.py
+++ b/lib/tool_shed/util/common_util.py
@@ -160,6 +160,19 @@
repository_dependencies_dict = encoding_util.tool_shed_decode( encoded_text )
return tool_shed_accessible, repository_dependencies_dict
+def get_protocol_from_tool_shed_url( tool_shed_url ):
+ """Return the protocol from the received tool_shed_url if it exists."""
+ try:
+ if tool_shed_url.find( '://' ) > 0:
+ return tool_shed_url.split( '://' )[0].lower()
+ except Exception, e:
+ # We receive a lot of calls here where the tool_shed_url is None. The container_util uses
+ # that value when creating a header row. If the tool_shed_url is not None, we have a problem.
+ if tool_shed_url is not None:
+ log.exception( "Handled exception getting the protocol from Tool Shed URL %s:\n%s" % ( str( tool_shed_url ), str( e ) ) )
+ # Default to HTTP protocol.
+ return 'http'
+
def get_tool_dependencies( app, tool_shed_url, repository_name, repository_owner, changeset_revision ):
tool_dependencies = []
tool_shed_accessible = True
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: Merged in dannon/galaxy-central-prmaker/stable (pull request #404)
by commits-noreply@bitbucket.org 10 Jun '14
by commits-noreply@bitbucket.org 10 Jun '14
10 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/f7dd0060c296/
Changeset: f7dd0060c296
Branch: stable
User: natefoo
Date: 2014-06-10 15:04:33
Summary: Merged in dannon/galaxy-central-prmaker/stable (pull request #404)
Fix impersonation when using external authentication -- #stable
Affected #: 2 files
diff -r 0fd0a4273b92cabfb1e0d03d20542c47aa59b9a8 -r f7dd0060c2966f2b9c66c5ac739d0e5a9a31faa0 lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -743,8 +743,10 @@
# No user, associate
galaxy_session.user = self.get_or_create_remote_user( remote_user_email )
galaxy_session_requires_flush = True
- elif galaxy_session.user.email != remote_user_email:
- # Session exists but is not associated with the correct remote user
+ elif galaxy_session.user.email != remote_user_email and self.app.config.allow_user_impersonation and remote_user_email not in [ x.strip() for x in self.app.config.get( "admin_users", "" ).split( "," ) ]:
+ # Session exists but is not associated with the correct
+ # remote user, and the currently set remote_user is not a
+ # potentially impersonating admin.
invalidate_existing_session = True
user_for_new_session = self.get_or_create_remote_user( remote_user_email )
log.warning( "User logged in as '%s' externally, but has a cookie as '%s' invalidating session",
diff -r 0fd0a4273b92cabfb1e0d03d20542c47aa59b9a8 -r f7dd0060c2966f2b9c66c5ac739d0e5a9a31faa0 lib/galaxy/web/framework/middleware/remoteuser.py
--- a/lib/galaxy/web/framework/middleware/remoteuser.py
+++ b/lib/galaxy/web/framework/middleware/remoteuser.py
@@ -76,6 +76,8 @@
return self.error( start_response, title, message )
if path_info.startswith( '/user/create' ) and environ[ self.remote_user_header ] in self.admin_users:
pass # admins can create users
+ elif path_info.startswith( '/user/logout' ) and environ[ self.remote_user_header ] in self.admin_users:
+ pass # Admin users may be impersonating, allow logout.
elif path_info.startswith( '/user/api_keys' ):
pass # api keys can be managed when remote_user is in use
elif path_info.startswith( '/user/edit_username' ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/b92cdb75f49e/
Changeset: b92cdb75f49e
Branch: stable
User: dannon
Date: 2014-06-09 14:14:18
Summary: Fix impersonation when using external authentication. Admins can now impersonate (and then log out of) users when using external auth.
Affected #: 2 files
diff -r 2ade3d7303fadb457d766ec928157e824264dbf6 -r b92cdb75f49efadb927868720915f9a65d4f329d lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -743,8 +743,10 @@
# No user, associate
galaxy_session.user = self.get_or_create_remote_user( remote_user_email )
galaxy_session_requires_flush = True
- elif galaxy_session.user.email != remote_user_email:
- # Session exists but is not associated with the correct remote user
+ elif galaxy_session.user.email != remote_user_email and self.app.config.allow_user_impersonation and remote_user_email not in [ x.strip() for x in self.app.config.get( "admin_users", "" ).split( "," ) ]:
+ # Session exists but is not associated with the correct
+ # remote user, and the currently set remote_user is not a
+ # potentially impersonating admin.
invalidate_existing_session = True
user_for_new_session = self.get_or_create_remote_user( remote_user_email )
log.warning( "User logged in as '%s' externally, but has a cookie as '%s' invalidating session",
diff -r 2ade3d7303fadb457d766ec928157e824264dbf6 -r b92cdb75f49efadb927868720915f9a65d4f329d lib/galaxy/web/framework/middleware/remoteuser.py
--- a/lib/galaxy/web/framework/middleware/remoteuser.py
+++ b/lib/galaxy/web/framework/middleware/remoteuser.py
@@ -76,6 +76,8 @@
return self.error( start_response, title, message )
if path_info.startswith( '/user/create' ) and environ[ self.remote_user_header ] in self.admin_users:
pass # admins can create users
+ elif path_info.startswith( '/user/logout' ) and environ[ self.remote_user_header ] in self.admin_users:
+ pass # Admin users may be impersonating, allow logout.
elif path_info.startswith( '/user/api_keys' ):
pass # api keys can be managed when remote_user is in use
elif path_info.startswith( '/user/edit_username' ):
https://bitbucket.org/galaxy/galaxy-central/commits/f7dd0060c296/
Changeset: f7dd0060c296
Branch: stable
User: natefoo
Date: 2014-06-10 15:04:33
Summary: Merged in dannon/galaxy-central-prmaker/stable (pull request #404)
Fix impersonation when using external authentication -- #stable
Affected #: 2 files
diff -r 0fd0a4273b92cabfb1e0d03d20542c47aa59b9a8 -r f7dd0060c2966f2b9c66c5ac739d0e5a9a31faa0 lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py
+++ b/lib/galaxy/web/framework/__init__.py
@@ -743,8 +743,10 @@
# No user, associate
galaxy_session.user = self.get_or_create_remote_user( remote_user_email )
galaxy_session_requires_flush = True
- elif galaxy_session.user.email != remote_user_email:
- # Session exists but is not associated with the correct remote user
+ elif galaxy_session.user.email != remote_user_email and self.app.config.allow_user_impersonation and remote_user_email not in [ x.strip() for x in self.app.config.get( "admin_users", "" ).split( "," ) ]:
+ # Session exists but is not associated with the correct
+ # remote user, and the currently set remote_user is not a
+ # potentially impersonating admin.
invalidate_existing_session = True
user_for_new_session = self.get_or_create_remote_user( remote_user_email )
log.warning( "User logged in as '%s' externally, but has a cookie as '%s' invalidating session",
diff -r 0fd0a4273b92cabfb1e0d03d20542c47aa59b9a8 -r f7dd0060c2966f2b9c66c5ac739d0e5a9a31faa0 lib/galaxy/web/framework/middleware/remoteuser.py
--- a/lib/galaxy/web/framework/middleware/remoteuser.py
+++ b/lib/galaxy/web/framework/middleware/remoteuser.py
@@ -76,6 +76,8 @@
return self.error( start_response, title, message )
if path_info.startswith( '/user/create' ) and environ[ self.remote_user_header ] in self.admin_users:
pass # admins can create users
+ elif path_info.startswith( '/user/logout' ) and environ[ self.remote_user_header ] in self.admin_users:
+ pass # Admin users may be impersonating, allow logout.
elif path_info.startswith( '/user/api_keys' ):
pass # api keys can be managed when remote_user is in use
elif path_info.startswith( '/user/edit_username' ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: Charts: Adjust chart type groups
by commits-noreply@bitbucket.org 10 Jun '14
by commits-noreply@bitbucket.org 10 Jun '14
10 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/0ed41ad6e8b8/
Changeset: 0ed41ad6e8b8
User: guerler
Date: 2014-06-10 11:51:15
Summary: Charts: Adjust chart type groups
Affected #: 3 files
diff -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f -r 0ed41ad6e8b803867947c4d28daef882cf411773 config/plugins/visualizations/charts/static/build-app.js
--- a/config/plugins/visualizations/charts/static/build-app.js
+++ b/config/plugins/visualizations/charts/static/build-app.js
@@ -3,4 +3,4 @@
// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore may be freely distributed under the MIT license.
-define("mvc/ui/ui-modal",[],function(){var e=Backbone.View.extend({elMain:"body",optionsDefault:{title:"ui-modal",body:"",backdrop:!0,height:null,width:null,closing_events:!1,closing_callback:null},buttonList:{},initialize:function(e){e&&this._create(e)},show:function(e){this.initialize(e),this.options.height?(this.$body.css("height",this.options.height),this.$body.css("overflow","hidden")):this.$body.css("max-height",$(window).height()/2),this.options.width&&this.$dialog.css("width",this.options.width),this.visible?this.$el.show():this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.visible=!1,this.$el.fadeOut("fast"),this.options.closing_callback&&this.options.closing_callback()},enableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!0)},showButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).show()},hideButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).hide()},getButton:function(e){var t=this.buttonList[e];return this.$buttons.find("#"+t)},scrollTop:function(){return this.$body.scrollTop()},_create:function(e){var t=this;this.options=_.defaults(e,this.optionsDefault),this.options.body=="progress"&&(this.options.body=$('<div class="progress progress-striped active"><div class="progress-bar progress-bar-info" style="width:100%"></div></div>')),this.$el&&(this.$el.remove(),$(document).off("keyup.ui-modal")),this.setElement(this._template(this.options.title)),this.$dialog=this.$el.find(".modal-dialog"),this.$body=this.$el.find(".modal-body"),this.$footer=this.$el.find(".modal-footer"),this.$buttons=this.$el.find(".buttons"),this.$backdrop=this.$el.find(".modal-backdrop"),this.$body.html(this.options.body),this.options.backdrop||this.$backdrop.removeClass("in");if(this.options.buttons){this.buttonList={};var n=0;$.each(this.options.buttons,function(e,r){var i="button-"+n++;t.$buttons.append($('<button id="'+i+'"></button>').text(e).click(r)).append(" "),t.buttonList[e]=i})}else this.$footer.hide();$(this.elMain).append($(this.el)),this.options.closing_events&&($(document).on("keyup.ui-modal",function(e){e.keyCode==27&&t.hide()}),this.$el.find(".modal-backdrop").on("click",function(){t.hide()}))},_template:function(e){return'<div class="ui-modal modal"><div class="modal-backdrop fade in" style="z-index: -1;"></div><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" style="display: none;">×</button><h4 class="title">'+e+"</h4>"+"</div>"+'<div class="modal-body" style="position: static;"></div>'+'<div class="modal-footer">'+'<div class="buttons" style="float: right;"></div>'+"</div>"+"</div"+"</div>"+"</div>"}});return{View:e}}),function(){var e=this,t=e._,n={},r=Array.prototype,i=Object.prototype,s=Function.prototype,o=r.push,u=r.slice,a=r.concat,f=i.toString,l=i.hasOwnProperty,c=r.forEach,h=r.map,p=r.reduce,d=r.reduceRight,v=r.filter,m=r.every,g=r.some,y=r.indexOf,b=r.lastIndexOf,w=Array.isArray,E=Object.keys,S=s.bind,x=function(e){if(e instanceof x)return e;if(!(this instanceof x))return new x(e);this._wrapped=e};typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(exports=module.exports=x),exports._=x):e._=x,x.VERSION="1.4.4";var T=x.each=x.forEach=function(e,t,r){if(e==null)return;if(c&&e.forEach===c)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,s=e.length;i<s;i++)if(t.call(r,e[i],i,e)===n)return}else for(var o in e)if(x.has(e,o)&&t.call(r,e[o],o,e)===n)return};x.map=x.collect=function(e,t,n){var r=[];return e==null?r:h&&e.map===h?e.map(t,n):(T(e,function(e,i,s){r.push(t.call(n,e,i,s))}),r)};var N="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(p&&e.reduce===p)return r&&(t=x.bind(t,r)),i?e.reduce(t,n):e.reduce(t);T(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(N);return n},x.reduceRight=x.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(d&&e.reduceRight===d)return r&&(t=x.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=x.keys(e);s=o.length}T(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(N);return n},x.find=x.detect=function(e,t,n){var r;return C(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},x.filter=x.select=function(e,t,n){var r=[];return e==null?r:v&&e.filter===v?e.filter(t,n):(T(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},x.reject=function(e,t,n){return x.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},x.every=x.all=function(e,t,r){t||(t=x.identity);var i=!0;return e==null?i:m&&e.every===m?e.every(t,r):(T(e,function(e,s,o){if(!(i=i&&t.call(r,e,s,o)))return n}),!!i)};var C=x.some=x.any=function(e,t,r){t||(t=x.identity);var i=!1;return e==null?i:g&&e.some===g?e.some(t,r):(T(e,function(e,s,o){if(i||(i=t.call(r,e,s,o)))return n}),!!i)};x.contains=x.include=function(e,t){return e==null?!1:y&&e.indexOf===y?e.indexOf(t)!=-1:C(e,function(e){return e===t})},x.invoke=function(e,t){var n=u.call(arguments,2),r=x.isFunction(t);return x.map(e,function(e){return(r?t:e[t]).apply(e,n)})},x.pluck=function(e,t){return x.map(e,function(e){return e[t]})},x.where=function(e,t,n){return x.isEmpty(t)?n?void 0:[]:x[n?"find":"filter"](e,function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0})},x.findWhere=function(e,t){return x.where(e,t,!0)},x.max=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&x.isEmpty(e))return-Infinity;var r={computed:-Infinity,value:-Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o>=r.computed&&(r={value:e,computed:o})}),r.value},x.min=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&x.isEmpty(e))return Infinity;var r={computed:Infinity,value:Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o<r.computed&&(r={value:e,computed:o})}),r.value},x.shuffle=function(e){var t,n=0,r=[];return T(e,function(e){t=x.random(n++),r[n-1]=r[t],r[t]=e}),r};var k=function(e){return x.isFunction(e)?e:function(t){return t[e]}};x.sortBy=function(e,t,n){var r=k(t);return x.pluck(x.map(e,function(e,t,i){return{value:e,index:t,criteria:r.call(n,e,t,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index<t.index?-1:1}),"value")};var L=function(e,t,n,r){var i={},s=k(t==null?x.identity:t);return T(e,function(t,o){var u=s.call(n,t,o,e);r(i,u,t)}),i};x.groupBy=function(e,t,n){return L(e,t,n,function(e,t,n){(x.has(e,t)?e[t]:e[t]=[]).push(n)})},x.countBy=function(e,t,n){return L(e,t,n,function(e,t){x.has(e,t)||(e[t]=0),e[t]++})},x.sortedIndex=function(e,t,n,r){n=n==null?x.identity:k(n);var i=n.call(r,t),s=0,o=e.length;while(s<o){var u=s+o>>>1;n.call(r,e[u])<i?s=u+1:o=u}return s},x.toArray=function(e){return e?x.isArray(e)?u.call(e):e.length===+e.length?x.map(e,x.identity):x.values(e):[]},x.size=function(e){return e==null?0:e.length===+e.length?e.length:x.keys(e).length},x.first=x.head=x.take=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,0,t):e[0]},x.initial=function(e,t,n){return u.call(e,0,e.length-(t==null||n?1:t))},x.last=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,Math.max(e.length-t,0)):e[e.length-1]},x.rest=x.tail=x.drop=function(e,t,n){return u.call(e,t==null||n?1:t)},x.compact=function(e){return x.filter(e,x.identity)};var A=function(e,t,n){return T(e,function(e){x.isArray(e)?t?o.apply(n,e):A(e,t,n):n.push(e)}),n};x.flatten=function(e,t){return A(e,t,[])},x.without=function(e){return x.difference(e,u.call(arguments,1))},x.uniq=x.unique=function(e,t,n,r){x.isFunction(t)&&(r=n,n=t,t=!1);var i=n?x.map(e,n,r):e,s=[],o=[];return T(i,function(n,r){if(t?!r||o[o.length-1]!==n:!x.contains(o,n))o.push(n),s.push(e[r])}),s},x.union=function(){return x.uniq(a.apply(r,arguments))},x.intersection=function(e){var t=u.call(arguments,1);return x.filter(x.uniq(e),function(e){return x.every(t,function(t){return x.indexOf(t,e)>=0})})},x.difference=function(e){var t=a.apply(r,u.call(arguments,1));return x.filter(e,function(e){return!x.contains(t,e)})},x.zip=function(){var e=u.call(arguments),t=x.max(x.pluck(e,"length")),n=new Array(t);for(var r=0;r<t;r++)n[r]=x.pluck(e,""+r);return n},x.unzip=function(e){var t=[];return x.each(e,function(e,n){x.each(e,function(e,r){t.length<=r&&(t[r]=[]),t[r][n]=e})}),t},x.object=function(e,t){if(e==null)return{};var n={};for(var r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},x.indexOf=function(e,t,n){if(e==null)return-1;var r=0,i=e.length;if(n){if(typeof n!="number")return r=x.sortedIndex(e,t),e[r]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(y&&e.indexOf===y)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},x.lastIndexOf=function(e,t,n){if(e==null)return-1;var r=n!=null;if(b&&e.lastIndexOf===b)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);var i=r?n:e.length;while(i--)if(e[i]===t)return i;return-1},x.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s};var O=function(){};x.bind=function(e,t){var n,r;if(e.bind===S&&S)return S.apply(e,u.call(arguments,1));if(!x.isFunction(e))throw new TypeError;return n=u.call(arguments,2),r=function(){if(this instanceof r){O.prototype=e.prototype;var i=new O;O.prototype=null;var s=e.apply(i,n.concat(u.call(arguments)));return Object(s)===s?s:i}return e.apply(t,n.concat(u.call(arguments)))}},x.partial=function(e){var t=u.call(arguments,1);return function(){return e.apply(this,t.concat(u.call(arguments)))}},x.bindAll=function(e){var t=u.call(arguments,1);if(t.length===0)throw new Error("bindAll must be passed function names");return T(t,function(t){e[t]=x.bind(e[t],e)}),e},x.memoize=function(e,t){var n={};return t||(t=x.identity),function(){var r=t.apply(this,arguments);return x.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},x.delay=function(e,t){var n=u.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},x.defer=function(e){return x.delay.apply(x,[e,1].concat(u.call(arguments,1)))},x.throttle=function(e,t,n){var r,i,s,o,u=0,a=function(){u=new Date,s=null,o=e.apply(r,i)};return function(){var f=new Date;!u&&n===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0?(clearTimeout(s),s=null,u=f,o=e.apply(r,i)):s||(s=setTimeout(a,l)),o}},x.debounce=function(e,t,n){var r,i;return function(){var s=this,o=arguments,u=function(){r=null,n||(i=e.apply(s,o))},a=n&&!r;return clearTimeout(r),r=setTimeout(u,t),a&&(i=e.apply(s,o)),i}},x.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}},x.wrap=function(e,t){return function(){var n=[e];return o.apply(n,arguments),t.apply(this,n)}},x.compose=function(){var e=arguments;return function(){var t=arguments;for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},x.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},x.keys=E||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)x.has(e,n)&&t.push(n);return t},x.values=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push(e[n]);return t},x.pairs=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push([n,e[n]]);return t},x.invert=function(e){var t={};for(var n in e)x.has(e,n)&&(t[e[n]]=n);return t},x.functions=x.methods=function(e){var t=[];for(var n in e)x.isFunction(e[n])&&t.push(n);return t.sort()},x.extend=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e},x.pick=function(e){var t={},n=a.apply(r,u.call(arguments,1));return T(n,function(n){n in e&&(t[n]=e[n])}),t},x.omit=function(e){var t={},n=a.apply(r,u.call(arguments,1));for(var i in e)x.contains(n,i)||(t[i]=e[i]);return t},x.defaults=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e},x.clone=function(e){return x.isObject(e)?x.isArray(e)?e.slice():x.extend({},e):e},x.tap=function(e,t){return t(e),e};var M=function(e,t,n,r){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return e===t;e instanceof x&&(e=e._wrapped),t instanceof x&&(t=t._wrapped);var i=f.call(e);if(i!=f.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(typeof e!="object"||typeof t!="object")return!1;var s=n.length;while(s--)if(n[s]==e)return r[s]==t;n.push(e),r.push(t);var o=0,u=!0;if(i=="[object Array]"){o=e.length,u=o==t.length;if(u)while(o--)if(!(u=M(e[o],t[o],n,r)))break}else{var a=e.constructor,l=t.constructor;if(a!==l&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(l)&&l instanceof l))return!1;for(var c in e)if(x.has(e,c)){o++;if(!(u=x.has(t,c)&&M(e[c],t[c],n,r)))break}if(u){for(c in t)if(x.has(t,c)&&!(o--))break;u=!o}}return n.pop(),r.pop(),u};x.isEqual=function(e,t){return M(e,t,[],[])},x.isEmpty=function(e){if(e==null)return!0;if(x.isArray(e)||x.isString(e))return e.length===0;for(var t in e)if(x.has(e,t))return!1;return!0},x.isElement=function(e){return!!e&&e.nodeType===1},x.isArray=w||function(e){return f.call(e)=="[object Array]"},x.isObject=function(e){return e===Object(e)},T(["Arguments","Function","String","Number","Date","RegExp"],function(e){x["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}}),x.isArguments(arguments)||(x.isArguments=function(e){return!!e&&!!x.has(e,"callee")}),typeof /./!="function"&&(x.isFunction=function(e){return typeof e=="function"}),x.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},x.isNaN=function(e){return x.isNumber(e)&&e!=+e},x.isBoolean=function(e){return e===!0||e===!1||f.call(e)=="[object Boolean]"},x.isNull=function(e){return e===null},x.isUndefined=function(e){return e===void 0},x.has=function(e,t){return l.call(e,t)},x.noConflict=function(){return e._=t,this},x.identity=function(e){return e},x.times=function(e,t,n){var r=Array(e);for(var i=0;i<e;i++)r[i]=t.call(n,i);return r},x.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var _={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};_.unescape=x.invert(_.escape);var D={escape:new RegExp("["+x.keys(_.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(_.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(e){x[e]=function(t){return t==null?"":(""+t).replace(D[e],function(t){return _[e][t]})}}),x.result=function(e,t){if(e==null)return void 0;var n=e[t];return x.isFunction(n)?n.call(e):n},x.mixin=function(e){T(x.functions(e),function(t){var n=x[t]=e[t];x.prototype[t]=function(){var e=[this._wrapped];return o.apply(e,arguments),F.call(this,n.apply(x,e))}})};var P=0;x.uniqueId=function(e){var t=++P+"";return e?e+t:t},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var H=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},j=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(e,t,n){var r;n=x.defaults({},n,x.templateSettings);var i=new RegExp([(n.escape||H).source,(n.interpolate||H).source,(n.evaluate||H).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(j,function(e){return"\\"+B[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,x);var a=function(e){return r.call(this,e,x)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},x.chain=function(e){return x(e).chain()};var F=function(e){return this._chain?x(e).chain():e};x.mixin(x),T(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];x.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],F.call(this,n)}}),T(["concat","join","slice"],function(e){var t=r[e];x.prototype[e]=function(){return F.call(this,t.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}.call(this),define("libs/underscore",function(e){return function(){var t,n;return t||e._}}(this)),define("utils/utils",["libs/underscore"],function(e){function t(e,t,r){n("GET",e,{},t,r)}function n(e,t,n,r,i){if(e=="GET"||e=="DELETE")t.indexOf("?")==-1?t+="?":t+="&",t+=$.param(n);var s=new XMLHttpRequest;s.open(e,t,!0),s.setRequestHeader("Accept","application/json"),s.setRequestHeader("Cache-Control","no-cache"),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.setRequestHeader("Content-Type","application/json"),s.onloadend=function(){var e=s.status;try{response=jQuery.parseJSON(s.responseText)}catch(t){response=s.responseText}e==200?r&&r(response):i&&i(response)},e=="GET"||e=="DELETE"?s.send():s.send(JSON.stringify(n))}function r(e,t){var n=$('<div class="'+e+'"></div>');n.appendTo(":eq(0)");var r=n.css(t);return n.remove(),r}function i(e){$('link[href^="'+e+'"]').length||$('<link href="'+galaxy_config.root+e+'" rel="stylesheet">').appendTo("head")}function s(t,n){return t?e.defaults(t,n):n}function o(e,t){var n="";if(e>=1e11)e/=1e11,n="TB";else if(e>=1e8)e/=1e8,n="GB";else if(e>=1e5)e/=1e5,n="MB";else if(e>=100)e/=100,n="KB";else{if(!(e>0))return"<strong>-</strong>";e*=10,n="b"}var r=Math.round(e)/10;return t?r+" "+n:"<strong>"+r+"</strong> "+n}function u(){return(new Date).getTime().toString(36)}function a(e){var t=$("<p></p>");return t.append(e),t}function f(){var e=new Date,t=(e.getHours()<10?"0":"")+e.getHours(),n=(e.getMinutes()<10?"0":"")+e.getMinutes(),r=e.getDate()+"/"+(e.getMonth()+1)+"/"+e.getFullYear()+", "+t+":"+n;return r}return{cssLoadFile:i,cssGetAttribute:r,get:t,merge:s,bytesToString:o,uuid:u,time:f,wrap:a,request:n}}),define("mvc/ui/ui-portlet",["utils/utils"],function(e){var t=Backbone.View.extend({visible:!1,optionsDefault:{title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom"},$title:null,$content:null,$buttons:null,$operations:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.$content=this.$el.find("#content"),this.$title=this.$el.find("#portlet-header-text");var n=this.$el.find("#portlet-content");this.options.scrollable?n.addClass("scroll"):this.options.title?n.addClass("no-scroll"):n.addClass("no-scroll-no-title"),this.options.nopadding&&(n.css("padding","0px"),this.$content.css("padding","0px")),this.$buttons=$(this.el).find("#buttons");if(this.options.buttons){var r=this;$.each(this.options.buttons,function(e,t){t.$el.prop("id",e),r.$buttons.append(t.$el)})}else this.$buttons.remove();this.$operations=$(this.el).find("#operations");if(this.options.operations){var r=this;$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$operations.append(t.$el)})}this.options.body&&this.append(this.options.body)},append:function(t){this.$content.append(e.wrap(t))},content:function(){return this.$content},show:function(){this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},enableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!1)},disableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!0)},hideOperation:function(e){this.$operations.find("#"+e).hide()},showOperation:function(e){this.$operations.find("#"+e).show()},setOperation:function(e,t){var n=this.$operations.find("#"+e);n.off("click"),n.on("click",t)},title:function(e){var t=this.$title;return e&&t.html(e),t.html()},_template:function(e){var t='<div class="ui-portlet">';return e.title&&(t+='<div id="portlet-header" class="portlet-header"><div id="operations" style="float: right;"></div><h3>',e.icon&&(t+='<i class="icon fa '+e.icon+'"> </i>'),t+='<span id="portlet-header-text">'+e.title+"</span>"+"</h3>"+"</div>"),t+='<div id="portlet-content" class="portlet-content">',e.placement=="top"&&(t+='<div id="buttons" class="buttons"></div>'),t+='<div id="content" class="content"></div>',e.placement=="bottom"&&(t+='<div id="buttons" class="buttons"></div>'),t+="</div></div>",t}});return{View:t}}),define("plugin/library/ui-select",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:!0,wait:!1},selected:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.selected=this.options.value,this.setElement(this._template(this.options)),this.$select=this.$el.find("#select"),this.$icon=this.$el.find("#icon");var n=this;this.$select.on("change",function(){n.value(n.$select.val())}),this.on("change",function(){n.options.onchange&&n.options.onchange(n.value())}),this._refresh(),this.options.visible||this.hide(),this.options.wait?this.wait():this.show()},value:function(e){var t=this.selected;e!==undefined&&(this.selected=e,this.$select.val(e));var n=this.selected;return n&&n!=t&&this.options.onchange&&this.options.onchange(n),n},first:function(){var e=this.$select.find("option");return e.length>0?e.val():undefined},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-caret-down"),this.$select.show(),this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-spinner fa-spin"),this.$select.hide()},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",!1)},disable:function(){this.$select.prop("disabled",!0)},add:function(e){this.$select.append(this._templateOption(e)),this._refresh()},del:function(e){this.$select.find("option[value="+e+"]").remove(),this.$select.trigger("change"),this._refresh()},update:function(e){this.$select.find("option").remove();for(var t in e)this.$select.append(this._templateOption(e[t]));this._refresh()},setOnChange:function(e){this.options.onchange=e},exists:function(e){return this.$select.find("option[value="+e+"]").length>0},_refresh:function(){this.$select.find("option[value=null]").remove();var e=this.$select.find("option").length;e==0?(this.disable(),this.$select.append(this._templateOption({value:"null",label:this.options.empty}))):this.enable(),this.selected&&this.$select.val(this.selected)},_templateOption:function(e){return'<option value="'+e.value+'">'+e.label+"</option>"},_template:function(e){var t='<div id="'+e.id+'" class="ui-select">'+'<div class="button">'+'<i id="icon"/>'+"</div>"+'<select id="select" class="select '+e.cls+" "+e.id+'">';for(key in e.data){var n=e.data[key],r="";if(n.value==e.value||n.value=="")r="selected";t+='<option value="'+n.value+'" '+r+">"+n.label+"</option>"}return t+="</select></div>",t}});return{View:t}}),define("plugin/library/ui",["utils/utils","plugin/library/ui-select","mvc/ui/ui-modal"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{url:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},_template:function(e){return'<img class="ui-image '+e.cls+'" src="'+e.url+'"/>'}}),i=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},title:function(e){this.$el.html(e)},_template:function(e){return'<label class="ui-label '+e.cls+'">'+e.title+"</label>"},value:function(){return options.title}}),s=Backbone.View.extend({optionsDefault:{id:null,title:"","float":"right",cls:"btn btn-default",icon:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t='<button id="'+e.id+'" type="submit" style="float: '+e.float+';" type="button" class="ui-button '+e.cls+'">';return e.icon&&(t+='<i class="icon fa '+e.icon+'"></i> '),t+=e.title+"</button>",t}}),o=Backbone.View.extend({optionsDefault:{"float":"right",icon:"",tooltip:"",placement:"bottom",title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){return'<div><span class="fa '+e.icon+'" class="ui-icon"/> '+e.title+"</div>"}}),u=Backbone.View.extend({optionsDefault:{title:"",id:null,"float":"right",cls:"icon-btn",icon:"",tooltip:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t="";e.title&&(t="width: auto;");var n='<div id="'+e.id+'" style="float: '+e.float+"; "+t+'" class="ui-button-icon '+e.cls+'">';return e.title?n+='<div class="button"><i class="icon fa '+e.icon+'"/> '+'<span class="title">'+e.title+"</span>"+"</div>":n+='<i class="icon fa '+e.icon+'"/>',n+="</div>",n}}),a=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick)},_template:function(e){return'<div><a href="javascript:void(0)" class="ui-anchor '+e.cls+'">'+e.title+"</a></div>"}}),f=Backbone.View.extend({optionsDefault:{message:"",status:"info",persistent:!1},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement("<div></div>")},update:function(t){this.options=e.merge(t,this.optionsDefault);if(t.message!=""){this.$el.html(this._template(this.options)),this.$el.find(".alert").append(t.message),this.$el.fadeIn();if(!t.persistent){var n=this;window.setTimeout(function(){n.$el.is(":visible")?n.$el.fadeOut():n.$el.hide()},3e3)}}else this.$el.fadeOut()},_template:function(e){return'<div class="ui-message alert alert-'+e.status+'"/>'}}),l=Backbone.View.extend({optionsDefault:{onclick:null,searchword:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options));var n=this;this.options.onclick&&this.$el.on("submit",function(e){var t=n.$el.find("#search");n.options.onclick(t.val())})},_template:function(e){return'<div class="ui-search"><form onsubmit="return false;"><input id="search" class="form-control input-sm" type="text" name="search" placeholder="Search..." value="'+e.searchword+'">'+'<button type="submit" class="btn search-btn">'+'<i class="fa fa-search"></i>'+"</button>"+"</form>"+"</div>"}}),c=Backbone.View.extend({optionsDefault:{id:"",title:"",target:"",href:"",onunload:null,onclick:null,visible:!0,icon:null,tag:""},$menu:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement($(this._template(this.options)));var n=$(this.el).find(".root"),r=this;n.on("click",function(e){e.preventDefault(),r.options.onclick&&r.options.onclick()}),this.options.visible||this.hide()},show:function(){$(this.el).show()},hide:function(){$(this.el).hide()},addMenu:function(t){var n={title:"",target:"",href:"",onclick:null,divider:!1,icon:null,cls:"button-menu btn-group"};n=e.merge(t,n),this.$menu||($(this.el).append(this._templateMenu()),this.$menu=$(this.el).find(".menu"));var r=$(this._templateMenuItem(n));r.on("click",function(e){e.preventDefault(),n.onclick&&n.onclick()}),this.$menu.append(r),n.divider&&this.$menu.append($(this._templateDivider()))},_templateMenuItem:function(e){var t='<li><a href="'+e.href+'" target="'+e.target+'">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),t+=" "+e.title+"</a>"+"</li>",t},_templateMenu:function(){return'<ul class="menu dropdown-menu pull-right" role="menu"></ul>'},_templateDivider:function(){return'<li class="divider"></li>'},_template:function(e){var t='<div id="'+e.id+'" class="ui-button-menu '+e.cls+'">'+'<button type="button" class="root btn btn-default dropdown-toggle" data-toggle="dropdown">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),"</button></div>",t}}),h=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<input id="'+e.id+'" type="'+e.type+'" value="'+e.value+'" placeholder="'+e.placeholder+'" class="ui-input '+e.cls+'">'}}),p=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<textarea id="'+e.id+'" class="ui-textarea '+e.cls+'" rows="5"></textarea>'}}),d=Backbone.View.extend({optionsDefault:{value:"",visible:!0,cls:"",data:[],id:e.uuid()},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.visible||this.$el.hide(),this.options.value&&this.value(this.options.value),this.current=this.options.value;var n=this;this.$el.find("input").on("change",function(){n.value(n._getValue())})},value:function(e){var t=this.current;e!==undefined&&(this.$el.find("label").removeClass("active"),this.$el.find('[value="'+e+'"]').closest("label").addClass("active"),this.current=e);var n=this.current;return n!=t&&this.options.onchange&&this.options.onchange(this.current),this.current},_getValue:function(){var e=this.$el.find(":checked"),t=null;return e.length>0&&(t=e.val()),t},_template:function(e){var t='<div class="btn-group ui-radiobutton" data-toggle="buttons">';for(key in e.data){var n=e.data[key];t+='<label class="btn btn-default"><input type="radio" name="'+e.id+'" value="'+n.value+'" selected>'+n.label+"</label>"}return t+="</div>",t}});return{Label:i,Button:s,Icon:o,ButtonIcon:u,Input:h,Anchor:a,Message:f,Searchbox:l,Select:t,ButtonMenu:c,Modal:n,Textarea:p,Image:r,RadioButton:d}}),define("plugin/library/jobs",["utils/utils"],function(e){return Backbone.Model.extend({initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n,r,i){var s=this;e.state("wait","Requesting job results...");var o=e.get("dataset_id_job");o!=""?s._wait(e,r,i):s._submit(e,t,n,r,i)},cleanup:function(t){var n=this,r=t.get("dataset_id_job");r!=""&&(e.request("PUT",config.root+"api/histories/none/contents/"+r,{deleted:!0},function(){n._refreshHdas()}),t.set("dataset_id_job",""))},_submit:function(t,n,r,i,s){var o=this,u=t.id,a=t.get("type"),f=t.definition;data={tool_id:"charts",inputs:{input:{id:t.get("dataset_id"),src:"hda"},module:f.execute,columns:r,settings:n}},t.state("wait","Sending job request..."),e.request("POST",config.root+"api/tools",data,function(e){if(!e.outputs||e.outputs.length==0)t.state("failed","Job submission failed. No response."),s&&s();else{o._refreshHdas();var n=e.outputs[0];t.state("wait","Your job has been queued. You may close the browser window. The job will run in the background."),t.set("dataset_id_job",n.id),this.app.storage.save(),o._wait(t,i,s)}},function(e){var n="";e&&e.message&&e.message.data&&e.message.data.input&&(n=e.message.data.input+"."),t.state("failed","This visualization requires the 'charts' tool. Please make sure it is installed. "+n),s&&s()})},_wait:function(t,n,r){var i=this;e.request("GET",config.root+"api/datasets/"+t.get("dataset_id_job"),{},function(e){var s=!1;switch(e.state){case"ok":t.state("wait","Job completed successfully..."),n&&n(e),s=!0;break;case"error":t.state("failed","Job has failed. Please check the history for details."),r&&r(e),s=!0;break;case"running":t.state("wait","Your job is running. You may close the browser window. The job will continue in the background.")}s||setTimeout(function(){i._wait(t,n,r)},i.app.config.get("query_timeout"))})},_refreshHdas:function(){Galaxy&&Galaxy.currHistoryPanel&&Galaxy.currHistoryPanel.refreshContents()}})}),define("plugin/library/datasets",["utils/utils"],function(e){return Backbone.Collection.extend({list:{},cache:{},initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n){var r=this;e.groups?this._get_dataset(e.id,function(){r._get(e,t)}):this._get_dataset(e.id,t,n)},_get_dataset:function(t,n,r){var i=this.list[t];if(i){n(i);return}var s=this;e.request("GET",config.root+"api/datasets/"+t,{},function(e){switch(e.state){case"error":r&&r(e);break;default:s.list[t]=e,n(e)}})},_block_id:function(e,t){return e.id+"_"+e.start+"_"+e.end+"_"+t},_get:function(e,t){e.start||(e.start=0),e.end||(e.end=this.app.config.get("query_limit"));var n=[],r={},i=0;for(var s in e.groups){var o=e.groups[s];for(var u in o.columns){var a=o.columns[u].index,f=this._block_id(e,a);if(this.cache[f]||a==="auto")continue;!r[a]&&a!==undefined&&(r[a]=i,n.push(a),i++)}}if(n.length==0){this._fill_from_cache(e),t(e);return}var l={dataset_id:e.id,start:e.start,end:e.end,columns:n},c=this;this._fetch(l,function(r){for(var i in r){var s=n[i],o=c._block_id(e,s);c.cache[o]=r[i]}c._fill_from_cache(e),t(e)})},_fill_from_cache:function(e){console.debug("Datasets::_fill_from_cache() - Filling request from cache.");var t=e.start,n=0;for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s],u=this._block_id(e,o.index),a=this.cache[u];a&&(n=Math.max(n,a.length))}}n==0&&console.debug("FAILED - Datasets::_fill_from_cache() - Invalid range.");for(var r in e.groups){var i=e.groups[r];i.values=[];for(var f=0;f<n;f++)i.values[f]={x:parseInt(f)+t}}for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s];if(o.index=="auto")for(var f=0;f<n;f++){var l=i.values[f];l[s]=parseInt(f)+t}else{var u=this._block_id(e,o.index),a=this.cache[u];for(var f=0;f<n;f++){var l=i.values[f],c=a[f];isNaN(c)&&!o.is_label&&(c=0),l[s]=c}}}}},_fetch:function(t,n){var r=t.start?t.start:0,i=Math.abs(t.end-t.start),s=this.app.config.get("query_limit");if(!i||i>s)i=s;var o=0;t.columns&&(o=t.columns.length,console.debug("Datasets::_fetch() - Fetching "+o+" column(s)")),o==0&&console.debug("Datasets::_fetch() - No columns requested");var u="";for(var a in t.columns)u+=t.columns[a]+",";u=u.substring(0,u.length-1);var f=this;e.request("GET",config.root+"api/datasets/"+t.dataset_id,{data_type:"raw_data",provider:"dataset-column",limit:i,offset:r,indeces:u},function(e){var t=new Array(o);for(var r=0;r<o;r++)t[r]=[];for(var r in e.data){var i=e.data[r];for(var s in i){var u=i[s];u!==undefined&&u!=2147483647&&t[s].push(u)}}console.debug("Datasets::_fetch() - Fetching complete."),n(t)})}})}),define("plugin/models/group",[],function(){return Backbone.Model.extend({defaults:{key:"Data label",date:""},reset:function(){this.clear({silent:!0}).set(this.defaults),this.trigger("reset",this)}})}),define("plugin/models/groups",["plugin/models/group"],function(e){return Backbone.Collection.extend({model:e})}),define("plugin/library/deferred",["utils/utils"],function(e){return Backbone.Model.extend({queue:[],process:{},counter:0,initialize:function(){this.on("refresh",function(){for(var e in this.queue)if(this.counter==0){var t=this.queue[e];this.queue.splice(e,1),t()}})},execute:function(e){this.queue.push(e),this.trigger("refresh")},register:function(){var t=e.uuid();return this.process[t]=!0,this.counter++,console.debug("Deferred:register() - Registering "+t),t},done:function(e){this.process[e]&&(delete this.process[e],this.counter--,console.debug("Deferred:done() - Unregistering "+e),this.trigger("refresh"))},ready:function(){return this.counter==0}})});var Visualization=Backbone.Model.extend({defaults:{config:{}},urlRoot:function(){var e="/api/visualizations";return window.galaxy_config&&galaxy_config.root?galaxy_config.root+e:e},initialize:function(e){_.isObject(e.config)&&_.isObject(this.defaults.config)&&_.defaults(e.config,this.defaults.config),this._setUpListeners()},_setUpListeners:function(){},set:function(e,t){if(e==="config"){var n=this.get("config");_.isObject(n)&&(t=_.extend(_.clone(n),t))}return Backbone.Model.prototype.set.call(this,e,t),this},toString:function(){var e=this.get("id")||"";return this.get("title")&&(e+=":"+this.get("title")),"Visualization("+e+")"}}),VisualizationCollection=Backbone.Collection.extend({model:Visualization,url:function(){return galaxy_config.root+"api/visualizations"},initialize:function(e,t){t=t||{}},set:function(e,t){var n=this;e=_.map(e,function(e){var t=n.get(e.id);if(!t)return e;var r=t.toJSON();return _.extend(r,e),r}),Backbone.Collection.prototype.set.call(this,e,t)},toString:function(){return["VisualizationCollection(",[this.historyId,this.length].join(),")"].join("")}});define("mvc/visualization/visualization-model",function(){}),define("plugin/models/chart",["plugin/models/groups","plugin/library/deferred","mvc/visualization/visualization-model"],function(e,t){return Backbone.Model.extend({defaults:{id:null,title:"",type:"",date:null,state:"",state_info:"",modified:!1,dataset_id:"",dataset_id_job:""},initialize:function(n){this.groups=new e,this.settings=new Backbone.Model,this.deferred=new t},reset:function(){this.clear({silent:!0}).set(this.defaults),this.groups.reset(),this.settings.clear(),this.trigger("reset",this)},copy:function(e){var t=this;t.clear({silent:!0}).set(this.defaults),t.set(e.attributes),t.settings=e.settings.clone(),t.groups.reset(),e.groups.each(function(e){t.groups.add(e.clone())}),t.trigger("change",t)},state:function(e,t){this.set("state",e),this.set("state_info",t),this.trigger("set:state"),console.debug("Chart:state() - "+t+" ("+e+")")}})}),define("plugin/library/storage",["utils/utils","plugin/models/chart","plugin/models/group"],function(e,t,n){return Backbone.Model.extend({vis:null,initialize:function(e){this.app=e,this.chart=this.app.chart,this.options=this.app.options,this.id=this.options.id,this.vis=new Visualization({type:"charts",config:{dataset_id:this.options.config.dataset_id,chart_dict:{}}}),this.id&&(this.vis.id=this.id);var t=this.options.config.chart_dict;t&&(this.vis.get("config").chart_dict=t)},save:function(){var e=this.app.chart;this.vis.get("config").chart_dict={};var t=e.get("title");t!=""&&this.vis.set("title",t);var n={attributes:e.attributes,settings:e.settings.attributes,groups:[]};e.groups.each(function(e){n.groups.push(e.attributes)}),this.vis.get("config").chart_dict=n;var r=this;this.vis.save().fail(function(e,t,n){console.error(e,t,n)}).then(function(e){e&&e.id&&(r.id=e.id)})},load:function(){var e=this.vis.get("config").chart_dict;if(!e.attributes)return!1;var t=e.attributes.type;if(!t)return console.debug("Storage::load() - Chart type not provided. Invalid format."),!1;var r=this.app.types.get(t);if(!r)return console.debug("Storage::load() - Chart type not supported. Please re-configure the chart. Resetting chart."),!1;console.debug("Storage::load() - Loading chart type "+t+"."),this.chart.definition=r,this.chart.set(e.attributes),this.chart.state("ok","Loading saved visualization..."),this.chart.settings.set(e.settings);for(var i in e.groups)this.chart.groups.add(new n(e.groups[i]));return this.chart.set("modified",!1),!0}})}),define("plugin/library/screenshot",["libs/underscore"],function(e){function t(e,t,i){e.find("svg").length>0?r(e,t,i):n(e)}function n(e){e.find("#canvas").jqplotSaveImage({})}function r(e,t,n){var r=new XMLSerializer,o="",u=this,a=0,f=0;return e.find("svg").each(function(){var e=$(this);i(e),a=parseInt(e.css("height")),f=parseInt(e.css("width")),e.attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:f,height:a}),e.find(".highcharts-button").hide(),o+=r.serializeToString(this),e.find(".highcharts-button").show()}),s(e,t,{filename:n||"chart",type:"application/pdf",height:a,width:f,scale:2,svg:o}),o}function i(e){for(var t in document.styleSheets){var n=document.styleSheets[t],r=n.cssRules;if(r)for(var i=0,s=r.length;i<s;i++)try{e.find(r[i].selectorText).each(function(e,t){t.style.cssText+=r[i].style.cssText})}catch(o){}}}function s(e,t,n){var r=e.find("#viewport-form");r.length===0&&(r=$("<form>",{id:"viewport-form",method:"post",action:t,display:"none"}),e.append(r)),r.empty();for(name in n){var i=$("<input/>",{type:"hidden",name:name,value:n[name]});r.append(i)}try{r.submit()}catch(s){console.log(s)}}return{create:t}}),define("plugin/views/viewport",["mvc/ui/ui-portlet","plugin/library/ui","plugin/library/screenshot","utils/utils"],function(e,t,n,r){return Backbone.View.extend({container_list:[],canvas_list:[],initialize:function(e,t){this.app=e,this.chart=this.app.chart,this.options=r.merge(t,this.optionsDefault),this.setElement($(this._template())),this._fullscreen(this.$el,100),this._createContainer("div");var n=this;this.chart.on("redraw",function(){n._draw(n.chart)}),this.chart.on("set:state",function(){var e=n.$el.find("#info"),t=n.$el.find(".charts-viewport-container"),r=e.find("#icon");r.removeClass(),e.show(),e.find("#text").html(n.chart.get("state_info"));var i=n.chart.get("state");switch(i){case"ok":e.hide(),t.show();break;case"failed":r.addClass("icon fa fa-warning"),t.hide();break;default:r.addClass("icon fa fa-spinner fa-spin"),t.show()}})},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_fullscreen:function(e,t){e.css("height",$(window).height()-t),$(window).resize(function(){e.css("height",$(window).height()-t)})},_createContainer:function(e,t){t=t||1;for(var n in this.container_list)this.container_list[n].remove();this.container_list=[],this.canvas_list=[];for(var n=0;n<t;n++){var r=$(this._templateContainer(e,parseInt(100/t)));this.$el.append(r),this.container_list[n]=r,e=="svg"?this.canvas_list[n]=d3.select(r.find("#canvas")[0]):this.canvas_list[n]=r.find("#canvas")}},_draw:function(e){var t=this,n=e.deferred.register(),r=e.get("type");this.chart_definition=e.definition;var i=this.chart_definition.use_panels||e.settings.get("use_panels")==="true",s=1;i&&(s=e.groups.length),this._createContainer(this.chart_definition.tag,s),e.state("wait","Please wait...");if(!this.chart_definition.execute||this.chart_definition.execute&&e.get("modified"))this.app.jobs.cleanup(e),e.set("modified",!1);var t=this;require(["plugin/charts/"+this.app.chartPath(r)+"/wrapper"],function(r){var i=new r(t.app,{canvas:t.canvas_list});t.chart_definition.execute?t.app.jobs.request(e,t._defaultSettingsString(e),t._defaultRequestString(e),function(){i.draw(n,e,t._defaultRequestDictionary(e))},function(){e.deferred.done(n)}):i.draw(n,e,t._defaultRequestDictionary(e))})},_defaultRequestString:function(e){var t="",n=0,r=this;return e.groups.each(function(e){n++;for(var i in r.chart_definition.columns)t+=i+"_"+n+":"+(parseInt(e.get(i))+1)+", "}),t.substring(0,t.length-2)},_defaultSettingsString:function(e){var t="";for(key in e.settings.attributes)t+=key+":"+e.settings.get(key)+", ";return t.substring(0,t.length-2)},_defaultRequestDictionary:function(e){var t={groups:[]};this.chart_definition.execute?t.id=e.get("dataset_id_job"):t.id=e.get("dataset_id");var n=0,i=this;return e.groups.each(function(e){var s={};for(var o in i.chart_definition.columns){var u=i.chart_definition.columns[o];s[o]=r.merge({index:e.get(o)},u)}t.groups.push({key:++n+":"+e.get("key"),columns:s})}),t},_template:function(){return'<div class="charts-viewport"><div id="info" class="info"><span id="icon" class="icon" /><span id="text" class="text" /></div></div>'},_templateContainer:function(e,t){return'<div class="charts-viewport-container" style="width:'+t+'%;">'+'<div id="menu"/>'+"<"+e+' id="canvas" class="charts-viewport-canvas">'+"</div>"}})}),define("plugin/views/viewer",["utils/utils","plugin/library/ui","mvc/ui/ui-portlet","plugin/models/group","plugin/views/viewport","plugin/library/screenshot"],function(e,t,n,r,i,s){return Backbone.View.extend({initialize:function(e,r){this.app=e,this.chart=this.app.chart,this.viewport_view=new i(e);var o=this;this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Viewport",scrollable:!1,operations:{edit_button:new t.ButtonIcon({icon:"fa-edit",tooltip:"Customize this chart",title:"Editor",onclick:function(){o._wait(o.chart,function(){o.app.go("editor")})}}),picture_button:new t.ButtonIcon({icon:"fa-camera",tooltip:"SVGs are converted to PDF via "+o.app.config.get("screenshot_url")+" and CANVAS-based charts to PNG-files.",title:"Screenshot",onclick:function(){o._wait(o.chart,function(){s.create(o.viewport_view.$el,o.app.config.get("screenshot_url"),o.chart.get("title"))})}})}}),this.portlet.append(this.message.$el),this.portlet.append(this.viewport_view.$el),this.setElement(this.portlet.$el);var o=this;this.chart.on("change:title",function(){o._refreshTitle()})},show:function(){this.$el.show(),$(window).trigger("resize")},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e)},_wait:function(e,t){e.deferred.ready()?t():this.message.update({message:"Your chart is currently being processed. Please wait and try again."})}})}),define("mvc/ui/ui-tabs",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{title_new:"",operations:null,onnew:null},initialize:function(t){this.visible=!1,this.$nav=null,this.$content=null,this.first_tab=null,this.options=e.merge(t,this.optionsDefault);var n=$(this._template(this.options));this.$nav=n.find(".tab-navigation"),this.$content=n.find(".tab-content"),this.setElement(n),this.list={};var r=this;this.options.operations&&$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$nav.find(".operations").append(t.$el)});if(this.options.onnew){var i=$(this._template_tab_new(this.options));this.$nav.append(i),i.tooltip({title:"Add a new tab",placement:"bottom",container:r.$el}),i.on("click",function(e){i.tooltip("hide"),r.options.onnew()})}},add:function(e){var t=this,n=e.id,r=$(this._template_tab(e)),i=$(this._template_tab_content(e));this.list[n]=e.ondel?!0:!1,this.options.onnew?this.$nav.find("#new-tab").before(r):this.$nav.append(r),i.append(e.$el),this.$content.append(i),_.size(this.list)==1&&(r.addClass("active"),i.addClass("active"),this.first_tab=n);if(e.ondel){var s=r.find("#delete");s.tooltip({title:"Delete this tab",placement:"bottom",container:t.$el}),s.on("click",function(){return s.tooltip("destroy"),t.$el.find(".tooltip").remove(),e.ondel(),!1})}r.on("click",function(r){r.preventDefault(),e.onclick?e.onclick():t.show(n)})},del:function(e){this.$el.find("#tab-"+e).remove(),this.$el.find("#tab-content-"+e).remove(),this.first_tab==e&&(this.first_tab=null),this.first_tab!=null&&this.show(this.first_tab)},delRemovable:function(){for(var e in this.list)this.list[e]&&this.del(e)},show:function(e){this.$el.fadeIn("fast"),this.visible=!0,e&&(this.$el.find(".tab-element").removeClass("active"),this.$el.find(".tab-pane").removeClass("active"),this.$el.find("#tab-"+e).addClass("active"),this.$el.find("#tab-content-"+e).addClass("active"))},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},hideOperation:function(e){this.$nav.find("#"+e).hide()},showOperation:function(e){this.$nav.find("#"+e).show()},setOperation:function(e,t){var n=this.$nav.find("#"+e);n.off("click"),n.on("click",t)},title:function(e,t){var n=this.$el.find("#tab-title-text-"+e);return t&&n.html(t),n.html()},_template:function(e){return'<div class="ui-tabs tabbable tabs-left"><ul id="tab-navigation" class="tab-navigation nav nav-tabs"><div class="operations" style="float: right; margin-bottom: 4px;"></div></ul><div id="tab-content" class="tab-content"/></div>'},_template_tab_new:function(e){return'<li id="new-tab"><a href="javascript:void(0);"><i class="ui-tabs-add fa fa-plus-circle"/>'+e.title_new+"</a>"+"</li>"},_template_tab:function(e){var t='<li id="tab-'+e.id+'" class="tab-element">'+'<a id="tab-title-link-'+e.id+'" title="" href="#tab-content-'+e.id+'" data-original-title="">'+'<span id="tab-title-text-'+e.id+'">'+e.title+"</span>";return e.ondel&&(t+='<i id="delete" class="ui-tabs-delete fa fa-minus-circle"/>'),t+="</a></li>",t},_template_tab_content:function(e){return'<div id="tab-content-'+e.id+'" class="tab-pane"/>'}});return{View:t}}),define("plugin/library/ui-table",["utils/utils"],function(e){var t=Backbone.View.extend({row:null,row_count:0,optionsDefault:{content:"No content available.",onchange:null,ondblclick:null,onconfirm:null,cls:""},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(t){this.options=e.merge(t,this.optionsDefault);var n=$(this._template(t));this.$thead=n.find("thead"),this.$tbody=n.find("tbody"),this.$tmessage=n.find("tmessage"),this.setElement(n),this.row=$("<tr></tr>")},addHeader:function(e){var t=$("<th></th>");t.append(e),this.row.append(t)},appendHeader:function(){this.$thead.append(this.row),this.row=$("<tr></tr>")},add:function(e,t,n){var r=$("<td></td>");t&&r.css("width",t),n&&r.css("text-align",n),r.append(e),this.row.append(r)},append:function(e){this._commit(e)},prepend:function(e){this._commit(e,!0)},get:function(e){return this.$el.find("#"+e)},del:function(e){var t=this.$tbody.find("#"+e);t.length>0&&(t.remove(),this.row_count--,this._refresh())},delAll:function(){this.$tbody.html(""),this.row_count=0,this._refresh()},value:function(e){this.before=this.$tbody.find(".current").attr("id"),e!==undefined&&(this.$tbody.find("tr").removeClass("current"),e&&this.$tbody.find("#"+e).addClass("current"));var t=this.$tbody.find(".current").attr("id");return t===undefined?null:(t!=this.before&&this.options.onchange&&this.options.onchange(e),t)},size:function(){return this.$tbody.find("tr").length},_commit:function(e,t){this.del(e),this.row.attr("id",e),t?this.$tbody.prepend(this.row):this.$tbody.append(this.row),this.row=$("<tr></tr>"),this.row_count++,this._refresh()},_onclick:function(e){var t=this.value(),n=$(e.target).closest("tr").attr("id");n!=""&&n&&t!=n&&(this.options.onconfirm?this.options.onconfirm(n):this.value(n))},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_refresh:function(){this.row_count==0?this.$tmessage.show():this.$tmessage.hide()},_template:function(e){return'<div><table class="ui-table '+e.cls+'">'+"<thead></thead>"+'<tbody style="cursor: pointer;"></tbody>'+"</table>"+"<tmessage>"+e.content+"</tmessage>"+"<div>"}});return{View:t}}),define("plugin/views/group",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(r,i){this.app=r;var s=this;this.chart=this.app.chart,this.group=i.group,this.group_key=new t.Input({placeholder:"Data label",onchange:function(e){s.group.set("key",e)}}),this.table=new e.View({content:"No data column."});var o=$("<div/>");o.append(n.wrap((new t.Label({title:"Provide a label:"})).$el)),o.append(n.wrap(this.group_key.$el)),o.append(n.wrap((new t.Label({title:"Select columns:"})).$el)),o.append(n.wrap(this.table.$el)),this.setElement(o);var s=this;this.chart.on("change:dataset_id",function(){s._refreshTable()}),this.chart.on("change:type",function(){s._refreshTable()}),this.group.on("change:key",function(){s._refreshGroupKey()}),this.group.on("change",function(){s._refreshGroup()}),this._refreshTable(),this._refreshGroupKey(),this._refreshGroup()},_refreshTable:function(){var e=this.chart.get("dataset_id"),n=this.chart.get("type");if(!e||!n)return;var r=this,i=this.chart.definition;this.table.delAll();var s={};for(var o in i.columns){var u=i.columns[o];if(!u){console.debug("Group::_refreshTable() - Skipping column definition.");continue}var a=new t.Select.View({id:"select_"+o,wait:!0});this.table.add(u.title,"25%"),this.table.add(a.$el),this.table.append(o),s[o]=a}this.chart.state("wait","Loading metadata...");var f=this.chart.deferred.register();this.app.datasets.request({id:e},function(e){for(var t in s)r._addRow(t,e,s,i.columns[t]);r.chart.state("ok","Metadata initialized..."),r.chart.deferred.done(f)})},_addRow:function(e,t,n,r){var i=this,s=r.is_label,o=r.is_auto,u=r.is_numeric,a=[],f=n[e];o&&a.push({label:"Column: Row Number",value:"auto"});var l=t.metadata_column_types;for(var c in l){var h=!1;l[c]=="int"||l[c]=="float"?h=u:h=s,h&&a.push({label:"Column: "+(parseInt(c)+1)+" ["+l[c]+"]",value:c})}f.update(a);if(!f.exists(this.group.get(e))){var p=f.first();console.debug('Group()::_addRow() - Switching model value from "'+this.group.get(e)+'" to "'+p+'".'),this.group.set(e,p)}f.value(this.group.get(e)),f.setOnChange(function(t){i.group.set(e,t),i.chart.set("modified",!0)}),f.show()},_refreshGroup:function(){this.group.set("date",n.time())},_refreshGroupKey:function(){var e=this.group.get("key");e===undefined&&(e=""),this.group_key.value(e)}})}),define("plugin/library/ui-table-form",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{title:"",content:"",mode:""},list:[],initialize:function(r,i){this.app=r,this.options=n.merge(i,this.optionsDefault),this.table_title=new t.Label({title:this.options.title}),this.table=new e.View({content:this.options.content});var s=$('<div class="ui-table-form"/>');this.options.title&&s.append(n.wrap(this.table_title.$el)),s.append(n.wrap(this.table.$el)),this.setElement(s)},title:function(e){this.table_title.title(e)},update:function(e,t){this.table.delAll(),this.list=[];for(var n in e)this._add(e[n].id||n,e[n],t);for(var n in this.list)this.list[n].trigger("change")},_add:function(e,n,r){var i=this,s=null,o=n.type;switch(o){case"text":s=new t.Input({id:"field-"+e,placeholder:n.placeholder,value:r.get(e),onchange:function(t){r.set(e,t)}});break;case"radiobutton":s=new t.RadioButton({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"select":s=new t.Select.View({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"dataset":s=new t.Select.View({id:"field-"+e,onchange:function(t){r.set(e,t)}}),i.app.datasets.on("all",function(){var t=[];i.app.datasets.each(function(e){e.get("datatype_id")==n.data&&t.push({value:e.get("id"),label:e.get("name")})}),s.update(t),r.get(e)||r.set(e,s.first()),s.value(r.get(e))}),i.app.datasets.trigger("all.datasets");break;case"textarea":s=new t.Textarea({id:"field-"+e,onchange:function(){r.set(e,s.value())}});break;case"separator":s=$("<div/>");break;default:s=new t.Input({id:"field-"+e,placeholder:n.placeholder,type:n.type,onchange:function(){r.set(e,s.value())}})}if(o!="separator"){r.get(e)||r.set(e,n.init),s.value(r.get(e)),this.list[e]=s;var u=$("<div/>");u.append(s.$el),n.info&&u.append('<div class="ui-table-form-info">'+n.info+"</div>"),this.options.style=="bold"?(this.table.add((new t.Label({title:n.title,cls:"form-label"})).$el),this.table.add(u)):(this.table.add('<span class="ui-table-form-title">'+n.title+"</span>","25%"),this.table.add(u))}else this.table.add('<div class="ui-table-form-separator">'+n.title+":<div/>"),this.table.add($("<div/>"));this.table.append(e)}});return{View:r}}),define("plugin/views/settings",["plugin/library/ui","plugin/library/ui-table-form","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(e,n){this.app=e;var r=this;this.chart=this.app.chart,this.form=new t.View({title:"Chart options:",content:"This chart type does not provide any options."}),this.setElement(this.form.$el);var r=this;this.chart.on("change",function(){r._refresh()})},_refresh:function(){var e=this.chart.definition;if(!e)return;this.form.title(e.category+" - "+e.title+":"),this.form.update(e.settings,this.chart.settings)}})}),define("plugin/views/types",["utils/utils","plugin/library/ui"],function(e,t){return Backbone.View.extend({optionsDefault:{onchange:null,ondblclick:null},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(n,r){var i=this;this.app=n,this.options=e.merge(r,this.optionsDefault);var s=$('<div class="charts-grid"/>');s.append(e.wrap((new t.Label({title:"How many data points would you like to analyze?"})).$el)),this.library=new t.RadioButton({data:[{label:"Few (<1k)",value:"small"},{label:"Some (<10k)",value:"medium"},{label:"Many (>10k)",value:"large"}],onchange:function(e){i._filter(e)}}),s.append(e.wrap(this.library.$el)),this.setElement(s),this._render(),this.library.value("small")},value:function(e){var t=this.$el.find(".current").attr("id");e!==undefined&&(this.$el.find(".current").removeClass("current"),this.$el.find("#"+e).addClass("current"));var n=this.$el.find(".current").attr("id");return n===undefined?null:(n!=t&&this.options.onchange&&this.options.onchange(e),n)},_filter:function(e){this.$el.find(".header").hide();var t=this.app.types.attributes;for(var n in t){var r=t[n],i=this.$el.find("#"+n),s=this.$el.find("#types-header-"+this.categories_index[r.category]),o=r.keywords||"";o.indexOf(e)>=0?(i.show(),s.show()):i.hide()}},_render:function(){this.categories={},this.categories_index={};var t=0,n=this.app.types.attributes;for(var r in n){var i=n[r],s=i.category;this.categories[s]||(this.categories[s]={},this.categories_index[s]=t++),this.categories[s][r]=i}for(var s in this.categories){var o=$('<div style="clear: both;"/>');o.append(e.wrap(this._template_header({id:"types-header-"+this.categories_index[s],title:s})));for(var r in this.categories[s]){var i=this.categories[s][r];o.append(e.wrap(this._template_item({id:r,title:i.title+" ("+i.library+")",url:config.app_root+"charts/"+this.app.chartPath(r)+"/logo.png"})))}this.$el.append(e.wrap(o))}},_onclick:function(e){var t=this.value(),n=$(e.target).closest(".item").attr("id");n!=""&&n&&t!=n&&this.value(n)},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_template_header:function(e){return'<div id="'+e.id+'" class="header">'+"• "+e.title+"<div>"},_template_item:function(e){return'<div id="'+e.id+'" class="item">'+'<img class="image" src="'+e.url+'">'+'<div class="title">'+e.title+"</div>"+"<div>"}})}),define("plugin/views/editor",["mvc/ui/ui-tabs","plugin/library/ui","mvc/ui/ui-portlet","utils/utils","plugin/models/chart","plugin/models/group","plugin/views/group","plugin/views/settings","plugin/views/types"],function(e,t,n,r,i,s,o,u,a){return Backbone.View.extend({optionsDefault:{header:!0,content:"No content available."},initialize:function(i,s){var o=this;this.app=i,this.chart=this.app.chart,this.options=r.merge(s,this.optionsDefault),this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Editor",operations:{save:new t.ButtonIcon({icon:"fa-save",tooltip:"Draw Chart",title:"Draw",onclick:function(){o._saveChart()}}),back:new t.ButtonIcon({icon:"fa-caret-left",tooltip:"Return to Viewer",title:"Cancel",onclick:function(){o.app.go("viewer"),o.app.storage.load()}})}}),this.types=new a(i,{onchange:function(e){var t=o.app.types.get(e);t||console.debug("FAILED - Editor::onchange() - Chart type not supported."),o.chart.definition=t,o.chart.settings.clear(),o.chart.set({type:e}),o.chart.set("modified",!0),console.debug("Editor::onchange() - Switched chart type.")},ondblclick:function(e){o._saveChart()}}),this.tabs=new e.View({title_new:"Add Data",onnew:function(){var e=o._addGroupModel();o.tabs.show(e.id)}}),this.title=new t.Input({placeholder:"Chart title",onchange:function(){o.chart.set("title",o.title.value())}});var f=$("<div/>");f.append(r.wrap((new t.Label({title:"Provide a chart title:"})).$el)),f.append(r.wrap(this.title.$el)),f.append(r.wrap(this.types.$el)),this.tabs.add({id:"main",title:"Start",$el:f}),this.settings=new u(this.app),this.tabs.add({id:"settings",title:"Configuration",$el:this.settings.$el}),this.portlet.append(this.message.$el),this.portlet.append(this.tabs.$el),this.setElement(this.portlet.$el),this.tabs.hideOperation("back");var o=this;this.chart.on("change:title",function(e){o._refreshTitle()}),this.chart.on("change:type",function(e){o.types.value(e.get("type"))}),this.chart.on("reset",function(e){o._resetChart()}),this.app.chart.on("redraw",function(e){o.portlet.showOperation("back")}),this.app.chart.groups.on("add",function(e){o._addGroup(e)}),this.app.chart.groups.on("remove",function(e){o._removeGroup(e)}),this.app.chart.groups.on("reset",function(e){o._removeAllGroups()}),this.app.chart.groups.on("change:key",function(e){o._refreshGroupKey()}),this._resetChart()},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e),this.title.value(e)},_refreshGroupKey:function(){var e=this,t=0;this.chart.groups.each(function(n){var r=n.get("key","");r==""&&(r="Chart data"),e.tabs.title(n.id,++t+": "+r)})},_addGroupModel:function(){var e=new s({id:r.uuid()});return this.chart.groups.add(e),e},_addGroup:function(e){var t=this,n=new o(this.app,{group:e});this.tabs.add({id:e.id,$el:n.$el,ondel:function(){t.chart.groups.remove(e.id)}}),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeGroup:function(e){this.tabs.del(e.id),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeAllGroups:function(e){this.tabs.delRemovable()},_resetChart:function(){this.chart.set("id",r.uuid()),this.chart.set("type","highcharts_bar"),this.chart.set("dataset_id",this.app.options.config.dataset_id),this.chart.set("title","New Chart"),this.portlet.hideOperation("back")},_saveChart:function(){this.chart.set({type:this.types.value(),title:this.title.value(),date:r.time()});if(this.chart.groups.length==0){this.message.update({message:"Please select data columns before drawing the chart."});var e=this._addGroupModel();this.tabs.show(e.id);return}var t=this,n=!0,i=this.chart.definition;this.chart.groups.each(function(e){if(!n)return;for(var r in i.columns)if(e.attributes[r]=="null"){t.message.update({status:"danger",message:"This chart type requires column types not found in your tabular file."}),t.tabs.show(e.id),n=!1;return}});if(!n)return;this.app.go("viewer");var t=this;this.chart.deferred.execute(function(){t.app.storage.save(),t.chart.trigger("redraw")})}})}),define("plugin/models/config",[],function(){return Backbone.Model.extend({defaults:{query_limit:500,query_timeout:100,screenshot_url:"http://export.highcharts.com/"}})}),function(){function t(e,t){return(new Date(t,e+1,0)).getDate()}function n(e,t,n){return function(r,i,s){var o=e(r),u=[];o<r&&t(o);if(s>1)while(o<i){var a=new Date(+o);n(a)%s===0&&u.push(a),t(o)}else while(o<i)u.push(new Date(+o)),t(o);return u}}var e=window.nv||{};e.version="1.1.15b",e.dev=!0,window.nv=e,e.tooltip=e.tooltip||{},e.utils=e.utils||{},e.models=e.models||{},e.charts={},e.graphs=[],e.logs={},e.dispatch=d3.dispatch("render_start","render_end"),e.dev&&(e.dispatch.on("render_start",function(t){e.logs.startTime=+(new Date)}),e.dispatch.on("render_end",function(t){e.logs.endTime=+(new Date),e.logs.totalTime=e.logs.endTime-e.logs.startTime,e.log("total",e.logs.totalTime)})),e.log=function(){if(e.dev&&console.log&&console.log.apply)console.log.apply(console,arguments);else if(e.dev&&typeof console.log=="function"&&Function.prototype.bind){var t=Function.prototype.bind.call(console.log,console);t.apply(console,arguments)}return arguments[arguments.length-1]},e.render=function(n){n=n||1,e.render.active=!0,e.dispatch.render_start(),setTimeout(function(){var t,r;for(var i=0;i<n&&(r=e.render.queue[i]);i++)t=r.generate(),typeof r.callback==typeof Function&&r.callback(t),e.graphs.push(t);e.render.queue.splice(0,i),e.render.queue.length?setTimeout(arguments.callee,0):(e.dispatch.render_end(),e.render.active=!1)},0)},e.render.active=!1,e.render.queue=[],e.addGraph=function(t){typeof arguments[0]==typeof Function&&(t={generate:arguments[0],callback:arguments[1]}),e.render.queue.push(t),e.render.active||e.render()},e.identity=function(e){return e},e.strip=function(e){return e.replace(/(\s|&)/g,"")},d3.time.monthEnd=function(e){return new Date(e.getFullYear(),e.getMonth(),0)},d3.time.monthEnds=n(d3.time.monthEnd,function(e){e.setUTCDate(e.getUTCDate()+1),e.setDate(t(e.getMonth()+1,e.getFullYear()))},function(e){return e.getMonth()}),e.interactiveGuideline=function(){function c(o){o.each(function(o){function g(){var e=d3.mouse(this),n=e[0],r=e[1],o=!0,a=!1;l&&(n=d3.event.offsetX,r=d3.event.offsetY,d3.event.target.tagName!=="svg"&&(o=!1),d3.event.target.className.baseVal.match("nv-legend")&&(a=!0)),o&&(n-=i.left,r-=i.top);if(n<0||r<0||n>p||r>d||d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined||a){if(l&&d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined&&d3.event.relatedTarget.className.match(t.nvPointerEventsClass))return;u.elementMouseout({mouseX:n,mouseY:r}),c.renderGuideLine(null);return}var f=s.invert(n);u.elementMousemove({mouseX:n,mouseY:r,pointXValue:f}),d3.event.type==="dblclick"&&u.elementDblclick({mouseX:n,mouseY:r,pointXValue:f})}var h=d3.select(this),p=n||960,d=r||400,v=h.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([o]),m=v.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");m.append("g").attr("class","nv-interactiveGuideLine");if(!f)return;f.on("mousemove",g,!0).on("mouseout",g,!0).on("dblclick",g),c.renderGuideLine=function(t){if(!a)return;var n=v.select(".nv-interactiveGuideLine").selectAll("line").data(t!=null?[e.utils.NaNtoZero(t)]:[],String);n.enter().append("line").attr("class","nv-guideline").attr("x1",function(e){return e}).attr("x2",function(e){return e}).attr("y1",d).attr("y2",0),n.exit().remove()}})}var t=e.models.tooltip(),n=null,r=null,i={left:0,top:0},s=d3.scale.linear(),o=d3.scale.linear(),u=d3.dispatch("elementMousemove","elementMouseout","elementDblclick"),a=!0,f=null,l=navigator.userAgent.indexOf("MSIE")!==-1;return c.dispatch=u,c.tooltip=t,c.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.left=typeof e.left!="undefined"?e.left:i.left,c):i},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.xScale=function(e){return arguments.length?(s=e,c):s},c.showGuideLine=function(e){return arguments.length?(a=e,c):a},c.svgContainer=function(e){return arguments.length?(f=e,c):f},c},e.interactiveBisect=function(e,t,n){if(!e instanceof Array)return null;typeof n!="function"&&(n=function(e,t){return e.x});var r=d3.bisector(n).left,i=d3.max([0,r(e,t)-1]),s=n(e[i],i);typeof s=="undefined"&&(s=i);if(s===t)return i;var o=d3.min([i+1,e.length-1]),u=n(e[o],o);return typeof u=="undefined"&&(u=o),Math.abs(u-t)>=Math.abs(s-t)?i:o},e.nearestValueIndex=function(e,t,n){var r=Infinity,i=null;return e.forEach(function(e,s){var o=Math.abs(t-e);o<=r&&o<n&&(r=o,i=s)}),i},function(){window.nv.tooltip={},window.nv.models.tooltip=function(){function y(){if(a){var e=d3.select(a);e.node().tagName!=="svg"&&(e=e.select("svg"));var t=e.node()?e.attr("viewBox"):null;if(t){t=t.split(" ");var n=parseInt(e.style("width"))/t[2];l.left=l.left*n,l.top=l.top*n}}}function b(e){var t;a?t=d3.select(a):t=d3.select("body");var n=t.select(".nvtooltip");return n.node()===null&&(n=t.append("div").attr("class","nvtooltip "+(u?u:"xy-tooltip")).attr("id",h)),n.node().innerHTML=e,n.style("top",0).style("left",0).style("opacity",0),n.selectAll("div, table, td, tr").classed(p,!0),n.classed(p,!0),n.node()}function w(){if(!c)return;if(!g(n))return;y();var t=l.left,u=o!=null?o:l.top,h=b(m(n));f=h;if(a){var p=a.getElementsByTagName("svg")[0],d=p?p.getBoundingClientRect():a.getBoundingClientRect(),v={left:0,top:0};if(p){var E=p.getBoundingClientRect(),S=a.getBoundingClientRect(),x=E.top;if(x<0){var T=a.getBoundingClientRect();x=Math.abs(x)>T.height?0:x}v.top=Math.abs(x-S.top),v.left=Math.abs(E.left-S.left)}t+=a.offsetLeft+v.left-2*a.scrollLeft,u+=a.offsetTop+v.top-2*a.scrollTop}return s&&s>0&&(u=Math.floor(u/s)*s),e.tooltip.calcTooltipPosition([t,u],r,i,h),w}var t=null,n=null,r="w",i=50,s=25,o=null,u=null,a=null,f=null,l={left:null,top:null},c=!0,h="nvtooltip-"+Math.floor(Math.random()*1e5),p="nv-pointer-events-none",d=function(e,t){return e},v=function(e){return e},m=function(e){if(t!=null)return t;if(e==null)return"";var n=d3.select(document.createElement("table")),r=n.selectAll("thead").data([e]).enter().append("thead");r.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(v(e.value));var i=n.selectAll("tbody").data([e]).enter().append("tbody"),s=i.selectAll("tr").data(function(e){return e.series}).enter().append("tr").classed("highlight",function(e){return e.highlight});s.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(e){return e.color}),s.append("td").classed("key",!0).html(function(e){return e.key}),s.append("td").classed("value",!0).html(function(e,t){return d(e.value,t)}),s.selectAll("td").each(function(e){if(e.highlight){var t=d3.scale.linear().domain([0,1]).range(["#fff",e.color]),n=.6;d3.select(this).style("border-bottom-color",t(n)).style("border-top-color",t(n))}});var o=n.node().outerHTML;return e.footer!==undefined&&(o+="<div class='footer'>"+e.footer+"</div>"),o},g=function(e){return e&&e.series&&e.series.length>0?!0:!1};return w.nvPointerEventsClass=p,w.content=function(e){return arguments.length?(t=e,w):t},w.tooltipElem=function(){return f},w.contentGenerator=function(e){return arguments.length?(typeof e=="function"&&(m=e),w):m},w.data=function(e){return arguments.length?(n=e,w):n},w.gravity=function(e){return arguments.length?(r=e,w):r},w.distance=function(e){return arguments.length?(i=e,w):i},w.snapDistance=function(e){return arguments.length?(s=e,w):s},w.classes=function(e){return arguments.length?(u=e,w):u},w.chartContainer=function(e){return arguments.length?(a=e,w):a},w.position=function(e){return arguments.length?(l.left=typeof e.left!="undefined"?e.left:l.left,l.top=typeof e.top!="undefined"?e.top:l.top,w):l},w.fixedTop=function(e){return arguments.length?(o=e,w):o},w.enabled=function(e){return arguments.length?(c=e,w):c},w.valueFormatter=function(e){return arguments.length?(typeof e=="function"&&(d=e),w):d},w.headerFormatter=function(e){return arguments.length?(typeof e=="function"&&(v=e),w):v},w.id=function(){return h},w},e.tooltip.show=function(t,n,r,i,s,o){var u=document.createElement("div");u.className="nvtooltip "+(o?o:"xy-tooltip");var a=s;if(!s||s.tagName.match(/g|svg/i))a=document.getElementsByTagName("body")[0];u.style.left=0,u.style.top=0,u.style.opacity=0,u.innerHTML=n,a.appendChild(u),s&&(t[0]=t[0]-s.scrollLeft,t[1]=t[1]-s.scrollTop),e.tooltip.calcTooltipPosition(t,r,i,u)},e.tooltip.findFirstNonSVGParent=function(e){while(e.tagName.match(/^g|svg$/i)!==null)e=e.parentNode;return e},e.tooltip.findTotalOffsetTop=function(e,t){var n=t;do isNaN(e.offsetTop)||(n+=e.offsetTop);while(e=e.offsetParent);return n},e.tooltip.findTotalOffsetLeft=function(e,t){var n=t;do isNaN(e.offsetLeft)||(n+=e.offsetLeft);while(e=e.offsetParent);return n},e.tooltip.calcTooltipPosition=function(t,n,r,i){var s=parseInt(i.offsetHeight),o=parseInt(i.offsetWidth),u=e.utils.windowSize().width,a=e.utils.windowSize().height,f=window.pageYOffset,l=window.pageXOffset,c,h;a=window.innerWidth>=document.body.scrollWidth?a:a-16,u=window.innerHeight>=document.body.scrollHeight?u:u-16,n=n||"s",r=r||20;var p=function(t){return e.tooltip.findTotalOffsetTop(t,h)},d=function(t){return e.tooltip.findTotalOffsetLeft(t,c)};switch(n){case"e":c=t[0]-o-r,h=t[1]-s/2;var v=d(i),m=p(i);v<l&&(c=t[0]+r>l?t[0]+r:l-v+c),m<f&&(h=f-m+h),m+s>f+a&&(h=f+a-m+h-s);break;case"w":c=t[0]+r,h=t[1]-s/2;var v=d(i),m=p(i);v+o>u&&(c=t[0]-o-r),m<f&&(h=f+5),m+s>f+a&&(h=f+a-m+h-s);break;case"n":c=t[0]-o/2-5,h=t[1]+r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),m+s>f+a&&(h=f+a-m+h-s);break;case"s":c=t[0]-o/2,h=t[1]-s-r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),f>m&&(h=f);break;case"none":c=t[0],h=t[1]-r;var v=d(i),m=p(i)}return i.style.left=c+"px",i.style.top=h+"px",i.style.opacity=1,i.style.position="absolute",i},e.tooltip.cleanup=function(){var e=document.getElementsByClassName("nvtooltip"),t=[];while(e.length)t.push(e[0]),e[0].style.transitionDelay="0 !important",e[0].style.opacity=0,e[0].className="nvtooltip-pending-removal";setTimeout(function(){while(t.length){var e=t.pop();e.parentNode.removeChild(e)}},500)}}(),e.utils.windowSize=function(){var e={width:640,height:480};return document.body&&document.body.offsetWidth&&(e.width=document.body.offsetWidth,e.height=document.body.offsetHeight),document.compatMode=="CSS1Compat"&&document.documentElement&&document.documentElement.offsetWidth&&(e.width=document.documentElement.offsetWidth,e.height=document.documentElement.offsetHeight),window.innerWidth&&window.innerHeight&&(e.width=window.innerWidth,e.height=window.innerHeight),e},e.utils.windowResize=function(e){if(e===undefined)return;var t=window.onresize;window.onresize=function(n){typeof t=="function"&&t(n),e(n)}},e.utils.getColor=function(t){return arguments.length?Object.prototype.toString.call(t)==="[object Array]"?function(e,n){return e.color||t[n%t.length]}:t:e.utils.defaultColor()},e.utils.defaultColor=function(){var e=d3.scale.category20().range();return function(t,n){return t.color||e[n%e.length]}},e.utils.customTheme=function(e,t,n){t=t||function(e){return e.key},n=n||d3.scale.category20().range();var r=n.length;return function(i,s){var o=t(i);return r||(r=n.length),typeof e[o]!="undefined"?typeof e[o]=="function"?e[o]():e[o]:n[--r]}},e.utils.pjax=function(t,n){function r(r){d3.html(r,function(r){var i=d3.select(n).node();i.parentNode.replaceChild(d3.select(r).select(n).node(),i),e.utils.pjax(t,n)})}d3.selectAll(t).on("click",function(){history.pushState(this.href,this.textContent,this.href),r(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&r(d3.event.state)})},e.utils.calcApproxTextWidth=function(e){if(typeof e.style=="function"&&typeof e.text=="function"){var t=parseInt(e.style("font-size").replace("px","")),n=e.text().length;return n*t*.5}return 0},e.utils.NaNtoZero=function(e){return typeof e!="number"||isNaN(e)||e===null||e===Infinity?0:e},e.utils.optionsFunc=function(e){return e&&d3.map(e).forEach(function(e,t){typeof this[e]=="function"&&this[e](t)}.bind(this)),this},e.models.axis=function(){function m(e){return e.each(function(e){var i=d3.select(this),m=i.selectAll("g.nv-wrap.nv-axis").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),y=g.append("g"),b=m.select("g");p!==null?t.ticks(p):(t.orient()=="top"||t.orient()=="bottom")&&t.ticks(Math.abs(s.range()[1]-s.range()[0])/100),b.call(t),v=v||t.scale();var w=t.tickFormat();w==null&&(w=v.tickFormat());var E=b.selectAll("text.nv-axislabel").data([o||null]);E.exit().remove();switch(t.orient()){case"top":E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",0).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+s(e)+",0)"}).select("text").attr("dy","-0.5em").attr("y",-t.tickPadding()).attr("text-anchor","middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+s.range()[t]+",0)"})}break;case"bottom":var T=36,N=30,C=b.selectAll("g").select("text");if(f%360){C.each(function(e,t){var n=this.getBBox().width;n>N&&(N=n)});var k=Math.abs(Math.sin(f*Math.PI/180)),T=(k?k*N:N)+30;C.attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f%360>0?"start":"end")}E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",T).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data([s.domain()[0],s.domain()[s.domain().length-1]]);x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",t.tickPadding()).attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f?f%360>0?"start":"end":"middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"})}c&&C.attr("transform",function(e,t){return"translate(0,"+(t%2==0?"0":"12")+")"});break;case"right":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"begin").attr("transform",l?"rotate(90)":"").attr("y",l?-Math.max(n.right,r)+12:-10).attr("x",l?s.range()[0]/2:t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+s(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",t.tickPadding()).style("text-anchor","start").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}break;case"left":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"end").attr("transform",l?"rotate(-90)":"").attr("y",l?-Math.max(n.left,r)+d:-10).attr("x",l?-s.range()[0]/2:-t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+v(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-t.tickPadding()).attr("text-anchor","end").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}}E.text(function(e){return e}),u&&(t.orient()==="left"||t.orient()==="right")&&(b.selectAll("g").each(function(e,t){d3.select(this).select("text").attr("opacity",1);if(s(e)<s.range()[1]+10||s(e)>s.range()[0]-10)(e>1e-10||e<-1e-10)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0)}),s.domain()[0]==s.domain()[1]&&s.domain()[0]==0&&m.selectAll("g.nv-axisMaxMin").style("opacity",function(e,t){return t?0:1}));if(u&&(t.orient()==="top"||t.orient()==="bottom")){var L=[];m.selectAll("g.nv-axisMaxMin").each(function(e,t){try{t?L.push(s(e)-this.getBBox().width-4):L.push(s(e)+this.getBBox().width+4)}catch(n){t?L.push(s(e)-4):L.push(s(e)+4)}}),b.selectAll("g").each(function(e,t){if(s(e)<L[0]||s(e)>L[1])e>1e-10||e<-1e-10?d3.select(this).remove():d3.select(this).select("text").remove()})}a&&b.selectAll(".tick").filter(function(e){return!parseFloat(Math.round(e.__data__*1e5)/1e6)&&e.__data__!==undefined}).classed("zero",!0),v=s.copy()}),m}var t=d3.svg.axis(),n={top:0,right:0,bottom:0,left:0},r=75,i=60,s=d3.scale.linear(),o=null,u=!0,a=!0,f=0,l=!0,c=!1,h=!1,p=null,d=12;t.scale(s).orient("bottom").tickFormat(function(e){return e});var v;return m.axis=t,d3.rebind(m,t,"orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"),d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.ticks=function(e){return arguments.length?(p=e,m):p},m.height=function(e){return arguments.length?(i=e,m):i},m.axisLabel=function(e){return arguments.length?(o=e,m):o},m.showMaxMin=function(e){return arguments.length?(u=e,m):u},m.highlightZero=function(e){return arguments.length?(a=e,m):a},m.scale=function(e){return arguments.length?(s=e,t.scale(s),h=typeof s.rangeBands=="function",d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m):s},m.rotateYLabel=function(e){return arguments.length?(l=e,m):l},m.rotateLabels=function(e){return arguments.length?(f=e,m):f},m.staggerLabels=function(e){return arguments.length?(c=e,m):c},m.axisLabelDistance=function(e){return arguments.length?(d=e,m):d},m},e.models.historicalBar=function(){function w(E){return E.each(function(w){var E=n-t.left-t.right,S=r-t.top-t.bottom,T=d3.select(this);s.domain(d||d3.extent(w[0].values.map(u).concat(f))),c?s.range(m||[E*.5/w[0].values.length,E*(w[0].values.length-.5)/w[0].values.length]):s.range(m||[0,E]),o.domain(v||d3.extent(w[0].values.map(a).concat(l))).range(g||[S,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=T.selectAll("g.nv-wrap.nv-historicalBar-"+i).data([w[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+i),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-bars"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){y.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",E).attr("height",S),A.attr("clip-path",h?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-bars").selectAll(".nv-bar").data(function(e){return e},function(e,t){return u(e,t)});O.exit().remove();var M=O.enter().append("rect").attr("x",0).attr("y",function(t,n){return e.utils.NaNtoZero(o(Math.max(0,a(t,n))))}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.abs(o(a(t,n))-o(0)))}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).on("mouseover",function(e,t){if(!b)return;d3.select(this).classed("hover",!0),y.elementMouseover({point:e,series:w[0],pos:[s(u(e,t)),o(a(e,t))],pointIndex:t,seriesIndex:0,e:d3.event})}).on("mouseout",function(e,t){if(!b)return;d3.select(this).classed("hover",!1),y.elementMouseout({point:e,series:w[0],pointIndex:t,seriesIndex:0,e:d3.event})}).on("click",function(e,t){if(!b)return;y.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){if(!b)return;y.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("fill",function(e,t){return p(e,t)}).attr("class",function(e,t,n){return(a(e,t)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+n+"-"+t}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).attr("width",E/w[0].values.length*.9),O.attr("y",function(t,n){var r=a(t,n)<0?o(0):o(0)-o(a(t,n))<1?o(0)-1:o(a(t,n));return e.utils.NaNtoZero(r)}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.max(Math.abs(o(a(t,n))-o(0)),1))})}),w}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[],l=[0],c=!1,h=!0,p=e.utils.defaultColor(),d,v,m,g,y=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),b=!0;return w.highlightPoint=function(e,t){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar-0-"+e).classed("hover",t)},w.clearHighlights=function(){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar.hover").classed("hover",!1)},w.dispatch=y,w.options=e.utils.optionsFunc.bind(w),w.x=function(e){return arguments.length?(u=e,w):u},w.y=function(e){return arguments.length?(a=e,w):a},w.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,w):t},w.width=function(e){return arguments.length?(n=e,w):n},w.height=function(e){return arguments.length?(r=e,w):r},w.xScale=function(e){return arguments.length?(s=e,w):s},w.yScale=function(e){return arguments.length?(o=e,w):o},w.xDomain=function(e){return arguments.length?(d=e,w):d},w.yDomain=function(e){return arguments.length?(v=e,w):v},w.xRange=function(e){return arguments.length?(m=e,w):m},w.yRange=function(e){return arguments.length?(g=e,w):g},w.forceX=function(e){return arguments.length?(f=e,w):f},w.forceY=function(e){return arguments.length?(l=e,w):l},w.padData=function(e){return arguments.length?(c=e,w):c},w.clipEdge=function(e){return arguments.length?(h=e,w):h},w.color=function(t){return arguments.length?(p=e.utils.getColor(t),w):p},w.id=function(e){return arguments.length?(i=e,w):i},w.interactive=function(e){return arguments.length?(b=!1,w):b},w},e.models.bullet=function(){function m(e){return e.each(function(e,n){var p=c-t.left-t.right,m=h-t.top-t.bottom,g=d3.select(this),y=i.call(this,e,n).slice().sort(d3.descending),b=s.call(this,e,n).slice().sort(d3.descending),w=o.call(this,e,n).slice().sort(d3.descending),E=u.call(this,e,n).slice(),S=a.call(this,e,n).slice(),x=f.call(this,e,n).slice(),T=d3.scale.linear().domain(d3.extent(d3.merge([l,y]))).range(r?[p,0]:[0,p]),N=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(T.range());this.__chart__=T;var C=d3.min(y),k=d3.max(y),L=y[1],A=g.selectAll("g.nv-wrap.nv-bullet").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),M=O.append("g"),_=A.select("g");M.append("rect").attr("class","nv-range nv-rangeMax"),M.append("rect").attr("class","nv-range nv-rangeAvg"),M.append("rect").attr("class","nv-range nv-rangeMin"),M.append("rect").attr("class","nv-measure"),M.append("path").attr("class","nv-markerTriangle"),A.attr("transform","translate("+t.left+","+t.top+")");var D=function(e){return Math.abs(N(e)-N(0))},P=function(e){return Math.abs(T(e)-T(0))},H=function(e){return e<0?N(e):N(0)},B=function(e){return e<0?T(e):T(0)};_.select("rect.nv-rangeMax").attr("height",m).attr("width",P(k>0?k:C)).attr("x",B(k>0?k:C)).datum(k>0?k:C),_.select("rect.nv-rangeAvg").attr("height",m).attr("width",P(L)).attr("x",B(L)).datum(L),_.select("rect.nv-rangeMin").attr("height",m).attr("width",P(k)).attr("x",B(k)).attr("width",P(k>0?C:k)).attr("x",B(k>0?C:k)).datum(k>0?C:k),_.select("rect.nv-measure").style("fill",d).attr("height",m/3).attr("y",m/3).attr("width",w<0?T(0)-T(w[0]):T(w[0])-T(0)).attr("x",B(w)).on("mouseover",function(){v.elementMouseover({value:w[0],label:x[0]||"Current",pos:[T(w[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:w[0],label:x[0]||"Current"})});var j=m/6;b[0]?_.selectAll("path.nv-markerTriangle").attr("transform",function(e){return"translate("+T(b[0])+","+m/2+")"}).attr("d","M0,"+j+"L"+j+","+ -j+" "+ -j+","+ -j+"Z").on("mouseover",function(){v.elementMouseover({value:b[0],label:S[0]||"Previous",pos:[T(b[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:b[0],label:S[0]||"Previous"})}):_.selectAll("path.nv-markerTriangle").remove(),A.selectAll(".nv-range").on("mouseover",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseover({value:e,label:n,pos:[T(e),m/2]})}).on("mouseout",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseout({value:e,label:n})})}),m}var t={top:0,right:0,bottom:0,left:0},n="left",r=!1,i=function(e){return e.ranges},s=function(e){return e.markers},o=function(e){return e.measures},u=function(e){return e.rangeLabels?e.rangeLabels:[]},a=function(e){return e.markerLabels?e.markerLabels:[]},f=function(e){return e.measureLabels?e.measureLabels:[]},l=[0],c=380,h=30,p=null,d=e.utils.getColor(["#1f77b4"]),v=d3.dispatch("elementMouseover","elementMouseout");return m.dispatch=v,m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(i=e,m):i},m.markers=function(e){return arguments.length?(s=e,m):s},m.measures=function(e){return arguments.length?(o=e,m):o},m.forceX=function(e){return arguments.length?(l=e,m):l},m.width=function(e){return arguments.length?(c=e,m):c},m.height=function(e){return arguments.length?(h=e,m):h},m.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,m):t},m.tickFormat=function(e){return arguments.length?(p=e,m):p},m.color=function(t){return arguments.length?(d=e.utils.getColor(t),m):d},m},e.models.bulletChart=function(){function m(e){return e.each(function(n,h){var g=d3.select(this),y=(a||parseInt(g.style("width"))||960)-i.left-i.right,b=f-i.top-i.bottom,w=this;m.update=function(){m(e)},m.container=this;if(!n||!s.call(this,n,h)){var E=g.selectAll(".nv-noData").data([p]);return E.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),E.attr("x",i.left+y/2).attr("y",18+i.top+b/2).text(function(e){return e}),m}g.selectAll(".nv-noData").remove();var S=s.call(this,n,h).slice().sort(d3.descending),x=o.call(this,n,h).slice().sort(d3.descending),T=u.call(this,n,h).slice().sort(d3.descending),N=g.selectAll("g.nv-wrap.nv-bulletChart").data([n]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-bulletWrap"),k.append("g").attr("class","nv-titles"),N.attr("transform","translate("+i.left+","+i.top+")");var A=d3.scale.linear().domain([0,Math.max(S[0],x[0],T[0])]).range(r?[y,0]:[0,y]),O=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(A.range());this.__chart__=A;var M=function(e){return Math.abs(O(e)-O(0))},_=function(e){return Math.abs(A(e)-A(0))},D=k.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(f-i.top-i.bottom)/2+")");D.append("text").attr("class","nv-title").text(function(e){return e.title}),D.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(e){return e.subtitle}),t.width(y).height(b);var P=L.select(".nv-bulletWrap");d3.transition(P).call(t);var H=l||A.tickFormat(y/100),B=L.selectAll("g.nv-tick").data(A.ticks(y/50),function(e){return this.textContent||H(e)}),j=B.enter().append("g").attr("class","nv-tick").attr("transform",function(e){return"translate("+O(e)+",0)"}).style("opacity",1e-6);j.append("line").attr("y1",b).attr("y2",b*7/6),j.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",b*7/6).text(H);var F=d3.transition(B).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1);F.select("line").attr("y1",b).attr("y2",b*7/6),F.select("text").attr("y",b*7/6),d3.transition(B.exit()).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1e-6).remove(),d.on("tooltipShow",function(e){e.key=n.title,c&&v(e,w.parentNode)})}),d3.timer.flush(),m}var t=e.models.bullet(),n="left",r=!1,i={top:5,right:40,bottom:20,left:120},s=function(e){return e.ranges},o=function(e){return e.markers},u=function(e){return e.measures},a=null,f=55,l=null,c=!0,h=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},p="No Data Available.",d=d3.dispatch("tooltipShow","tooltipHide"),v=function(t,n){var r=t.pos[0]+(n.offsetLeft||0)+i.left,s=t.pos[1]+(n.offsetTop||0)+i.top,o=h(t.key,t.label,t.value,t,m);e.tooltip.show([r,s],o,t.value<0?"e":"w",null,n)};return t.dispatch.on("elementMouseover.tooltip",function(e){d.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){d.tooltipHide(e)}),d.on("tooltipHide",function(){c&&e.tooltip.cleanup()}),m.dispatch=d,m.bullet=t,d3.rebind(m,t,"color"),m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(s=e,m):s},m.markers=function(e){return arguments.length?(o=e,m):o},m.measures=function(e){return arguments.length?(u=e,m):u},m.width=function(e){return arguments.length?(a=e,m):a},m.height=function(e){return arguments.length?(f=e,m):f},m.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,m):i},m.tickFormat=function(e){return arguments.length?(l=e,m):l},m.tooltips=function(e){return arguments.length?(c=e,m):c},m.tooltipContent=function(e){return arguments.length?(h=e,m):h},m.noData=function(e){return arguments.length?(p=e,m):p},m},e.models.cumulativeLineChart=function(){function D(b){return b.each(function(b){function I(e,t){d3.select(D.container).style("cursor","ew-resize")}function q(e,t){M.x=d3.event.x,M.i=Math.round(O.invert(M.x)),nt()}function R(e,t){d3.select(D.container).style("cursor","auto"),x.index=M.i,k.stateChange(x)}function nt(){tt.data([M]);var e=D.transitionDuration();D.transitionDuration(0),D.update(),D.transitionDuration(e)}var L=d3.select(this).classed("nv-chart-"+S,!0),A=this,H=(f||parseInt(L.style("width"))||960)-u.left-u.right,B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom;D.update=function(){L.call(D)},D.container=this,x.disabled=b.map(function(e){return!!e.disabled});if(!T){var j;T={};for(j in x)x[j]instanceof Array?T[j]=x[j].slice(0):T[j]=x[j]}var F=d3.behavior.drag().on("dragstart",I).on("drag",q).on("dragend",R);if(!b||!b.length||!b.filter(function(e){return e.values.length}).length){var U=L.selectAll(".nv-noData").data([N]);return U.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),U.attr("x",u.left+H/2).attr("y",u.top+B/2).text(function(e){return e}),D}L.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();if(!y){var z=b.filter(function(e){return!e.disabled}).map(function(e,n){var r=d3.extent(e.values,t.y());return r[0]<-0.95&&(r[0]=-0.95),[(r[0]-r[1])/(1+r[1]),(r[1]-r[0])/(1+r[0])]}),W=[d3.min(z,function(e){return e[0]}),d3.max(z,function(e){return e[1]})];t.yDomain(W)}else t.yDomain(null);O.domain([0,b[0].values.length-1]).range([0,H]).clamp(!0);var b=P(M.i,b),X=g?"none":"all",V=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([b]),$=V.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),J=V.select("g");$.append("g").attr("class","nv-interactive"),$.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),$.append("g").attr("class","nv-y nv-axis"),$.append("g").attr("class","nv-background"),$.append("g").attr("class","nv-linesWrap").style("pointer-events",X),$.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),$.append("g").attr("class","nv-legendWrap"),$.append("g").attr("class","nv-controlsWrap"),c&&(i.width(H),J.select(".nv-legendWrap").datum(b).call(i),u.top!=i.height()&&(u.top=i.height(),B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom),J.select(".nv-legendWrap").attr("transform","translate(0,"+ -u.top+")"));if(m){var K=[{key:"Re-scale y-axis",disabled:!y}];s.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),J.select(".nv-controlsWrap").datum(K).attr("transform","translate(0,"+ -u.top+")").call(s)}V.attr("transform","translate("+u.left+","+u.top+")"),d&&J.select(".nv-y.nv-axis").attr("transform","translate("+H+",0)");var Q=b.filter(function(e){return e.tempDisabled});V.select(".tempDisabled").remove(),Q.length&&V.append("text").attr("class","tempDisabled").attr("x",H/2).attr("y","-.71em").style("text-anchor","end").text(Q.map(function(e){return e.key}).join(", ")+" values cannot be calculated for this time period."),g&&(o.width(H).height(B).margin({left:u.left,top:u.top}).svgContainer(L).xScale(w),V.select(".nv-interactive").call(o)),$.select(".nv-background").append("rect"),J.select(".nv-background rect").attr("width",H).attr("height",B),t.y(function(e){return e.display.y}).width(H).height(B).color(b.map(function(e,t){return e.color||a(e,t)}).filter(function(e,t){return!b[t].disabled&&!b[t].tempDisabled}));var G=J.select(".nv-linesWrap").datum(b.filter(function(e){return!e.disabled&&!e.tempDisabled}));G.call(t),b.forEach(function(e,t){e.seriesIndex=t});var Y=b.filter(function(e){return!e.disabled&&!!C(e)}),Z=J.select(".nv-avgLinesWrap").selectAll("line").data(Y,function(e){return e.key}),et=function(e){var t=E(C(e));return t<0?0:t>B?B:t};Z.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(e,n){return t.color()(e,e.seriesIndex)}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.style("stroke-opacity",function(e){var t=E(C(e));return t<0||t>B?0:1}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.exit().remove();var tt=G.selectAll(".nv-indexLine").data([M]);tt.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(F),tt.attr("transform",function(e){return"translate("+O(e.i)+",0)"}).attr("height",B),h&&(n.scale(w).ticks(Math.min(b[0].values.length,H/70)).tickSize(-B,0),J.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),d3.transition(J.select(".nv-x.nv-axis")).call(n)),p&&(r.scale(E).ticks(B/36).tickSize(-H,0),d3.transition(J.select(".nv-y.nv-axis")).call(r)),J.select(".nv-background rect").on("click",function(){M.x=d3.mouse(this)[0],M.i=Math.round(O.invert(M.x)),x.index=M.i,k.stateChange(x),nt()}),t.dispatch.on("elementClick",function(e){M.i=e.pointIndex,M.x=O(M.i),x.index=M.i,k.stateChange(x),nt()}),s.dispatch.on("legendClick",function(e,t){e.disabled=!e.disabled,y=!e.disabled,x.rescaleY=y,k.stateChange(x),D.update()}),i.dispatch.on("stateChange",function(e){x.disabled=e.disabled,k.stateChange(x),D.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,f,l,c=[];b.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,D.x()),t.highlightPoint(r,f,!0);var o=n.values[f];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof l=="undefined"&&(l=D.xScale()(D.x()(o,f))),c.push({key:n.key,value:D.y()(o,f),color:a(n,n.seriesIndex)})});if(c.length>2){var h=D.yScale().invert(i.mouseY),p=Math.abs(D.yScale().domain()[0]-D.yScale().domain()[1]),d=.03*p,m=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);m!==null&&(c[m].highlight=!0)}var g=n.tickFormat()(D.x()(s,f),f);o.tooltip.position({left:l+u.left,top:i.mouseY+u.top}).chartContainer(A.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:g,series:c})(),o.renderGuideLine(l)}),o.dispatch.on("elementMouseout",function(e){k.tooltipHide(),t.clearHighlights()}),k.on("tooltipShow",function(e){v&&_(e,A.parentNode)}),k.on("changeState",function(e){typeof e.disabled!="undefined"&&(b.forEach(function(t,n){t.disabled=e.disabled[n]}),x.disabled=e.disabled),typeof e.index!="undefined"&&(M.i=e.index,M.x=O(M.i),x.index=e.index,tt.data([M])),typeof e.rescaleY!="undefined"&&(y=e.rescaleY),D.update()})}),D}function P(e,n){return n.map(function(n,r){if(!n.values)return n;var i=n.values[e];if(i==null)return n;var s=t.y()(i,e);return s<-0.95&&!A?(n.tempDisabled=!0,n):(n.tempDisabled=!1,n.values=n.values.map(function(e,n){return e.display={y:(t.y()(e,n)-s)/(1+s)},e}),n)})}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:30,bottom:50,left:60},a=e.utils.defaultColor(),f=null,l=null,c=!0,h=!0,p=!0,d=!1,v=!0,m=!0,g=!1,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},w,E,S=t.id(),x={index:0,rescaleY:y},T=null,N="No Data Available.",C=function(e){return e.average},k=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),L=0,A=!1;n.orient("bottom").tickPadding(7),r.orient(d?"right":"left"),s.updateState(!1);var O=d3.scale.linear(),M={i:0,x:0},_=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,D);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],k.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){k.tooltipHide(e)}),k.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),D.dispatch=k,D.lines=t,D.legend=i,D.xAxis=n,D.yAxis=r,D.interactiveLayer=o,d3.rebind(D,t,"defined","isArea","x","y","xScale","yScale","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id"),D.options=e.utils.optionsFunc.bind(D),D.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,D):u},D.width=function(e){return arguments.length?(f=e,D):f},D.height=function(e){return arguments.length?(l=e,D):l},D.color=function(t){return arguments.length?(a=e.utils.getColor(t),i.color(a),D):a},D.rescaleY=function(e){return arguments.length?(y=e,D):y},D.showControls=function(e){return arguments.length?(m=e,D):m},D.useInteractiveGuideline=function(e){return arguments.length?(g=e,e===!0&&(D.interactive(!1),D.useVoronoi(!1)),D):g},D.showLegend=function(e){return arguments.length?(c=e,D):c},D.showXAxis=function(e){return arguments.length?(h=e,D):h},D.showYAxis=function(e){return arguments.length?(p=e,D):p},D.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),D):d},D.tooltips=function(e){return arguments.length?(v=e,D):v},D.tooltipContent=function(e){return arguments.length?(b=e,D):b},D.state=function(e){return arguments.length?(x=e,D):x},D.defaultState=function(e){return arguments.length?(T=e,D):T},D.noData=function(e){return arguments.length?(N=e,D):N},D.average=function(e){return arguments.length?(C=e,D):C},D.transitionDuration=function(e){return arguments.length?(L=e,D):L},D.noErrorCheck=function(e){return arguments.length?(A=e,D):A},D},e.models.discreteBar=function(){function E(e){return e.each(function(e){var i=n-t.left-t.right,E=r-t.top-t.bottom,S=d3.select(this);e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var T=p&&d?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0}})});s.domain(p||d3.merge(T).map(function(e){return e.x})).rangeBands(v||[0,i],.1),o.domain(d||d3.extent(d3.merge(T).map(function(e){return e.y}).concat(f))),c?o.range(m||[E-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]):o.range(m||[E,0]),b=b||s,w=w||o.copy().range([o(0),o(0)]);var N=S.selectAll("g.nv-wrap.nv-discretebar").data([e]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-groups"),N.attr("transform","translate("+t.left+","+t.top+")");var A=N.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),A.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),A.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),A.style("stroke-opacity",1).style("fill-opacity",.75);var O=A.selectAll("g.nv-bar").data(function(e){return e.values});O.exit().remove();var M=O.enter().append("g").attr("transform",function(e,t,n){return"translate("+(s(u(e,t))+s.rangeBand()*.05)+", "+o(0)+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),g.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),g.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){g.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){g.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()});M.append("rect").attr("height",0).attr("width",s.rangeBand()*.9/e.length),c?(M.append("text").attr("text-anchor","middle"),O.select("text").text(function(e,t){return h(a(e,t))}).attr("x",s.rangeBand()*.9/2).attr("y",function(e,t){return a(e,t)<0?o(a(e,t))-o(0)+12:-4})):O.selectAll("text").remove(),O.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(e,t){return e.color||l(e,t)}).style("stroke",function(e,t){return e.color||l(e,t)}).select("rect").attr("class",y).attr("width",s.rangeBand()*.9/e.length),O.attr("transform",function(e,t){var n=s(u(e,t))+s.rangeBand()*.05,r=a(e,t)<0?o(0):o(0)-o(a(e,t))<1?o(0)-1:o(a(e,t));return"translate("+n+", "+r+")"}).select("rect").attr("height",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(d&&d[0]||0))||1)}),b=s.copy(),w=o.copy()}),E}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=!1,h=d3.format(",.2f"),p,d,v,m,g=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),y="discreteBar",b,w;return E.dispatch=g,E.options=e.utils.optionsFunc.bind(E),E.x=function(e){return arguments.length?(u=e,E):u},E.y=function(e){return arguments.length?(a=e,E):a},E.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,E):t},E.width=function(e){return arguments.length?(n=e,E):n},E.height=function(e){return arguments.length?(r=e,E):r},E.xScale=function(e){return arguments.length?(s=e,E):s},E.yScale=function(e){return arguments.length?(o=e,E):o},E.xDomain=function(e){return arguments.length?(p=e,E):p},E.yDomain=function(e){return arguments.length?(d=e,E):d},E.xRange=function(e){return arguments.length?(v=e,E):v},E.yRange=function(e){return arguments.length?(m=e,E):m},E.forceY=function(e){return arguments.length?(f=e,E):f},E.color=function(t){return arguments.length?(l=e.utils.getColor(t),E):l},E.id=function(e){return arguments.length?(i=e,E):i},E.showValues=function(e){return arguments.length?(c=e,E):c},E.valueFormat=function(e){return arguments.length?(h=e,E):h},E.rectClass=function(e){return arguments.length?(y=e,E):y},E},e.models.discreteBarChart=function(){function w(e){return e.each(function(e){var u=d3.select(this),p=this,y=(s||parseInt(u.style("width"))||960)-i.left-i.right,E=(o||parseInt(u.style("height"))||400)-i.top-i.bottom;w.update=function(){g.beforeUpdate(),u.call(w)},w.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var S=u.selectAll(".nv-noData").data([m]);return S.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),S.attr("x",i.left+y/2).attr("y",i.top+E/2).text(function(e){return e}),w}u.selectAll(".nv-noData").remove(),d=t.xScale(),v=t.yScale().clamp(!0);var T=u.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),C=N.append("defs"),k=T.select("g");N.append("g").attr("class","nv-x nv-axis"),N.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),N.append("g").attr("class","nv-barsWrap"),k.attr("transform","translate("+i.left+","+i.top+")"),l&&k.select(".nv-y.nv-axis").attr("transform","translate("+y+",0)"),t.width(y).height(E);var L=k.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));L.call(t),C.append("clipPath").attr("id","nv-x-label-clip-"+t.id()).append("rect"),k.select("#nv-x-label-clip-"+t.id()+" rect").attr("width",d.rangeBand()*(c?2:1)).attr("height",16).attr("x",-d.rangeBand()/(c?1:2));if(a){n.scale(d).ticks(y/100).tickSize(-E,0),k.select(".nv-x.nv-axis").attr("transform","translate(0,"+(v.range()[0]+(t.showValues()&&v.domain()[0]<0?16:0))+")"),k.select(".nv-x.nv-axis").call(n);var A=k.select(".nv-x.nv-axis").selectAll("g");c&&A.selectAll("text").attr("transform",function(e,t,n){return"translate(0,"+(n%2==0?"5":"17")+")"})}f&&(r.scale(v).ticks(E/36).tickSize(-y,0),k.select(".nv-y.nv-axis").call(r)),k.select(".nv-zeroLine line").attr("x1",0).attr("x2",y).attr("y1",v(0)).attr("y2",v(0)),g.on("tooltipShow",function(e){h&&b(e,p.parentNode)})}),w}var t=e.models.discreteBar(),n=e.models.axis(),r=e.models.axis(),i={top:15,right:10,bottom:50,left:60},s=null,o=null,u=e.utils.getColor(),a=!0,f=!0,l=!1,c=!1,h=!0,p=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},d,v,m="No Data Available.",g=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate"),y=0;n.orient("bottom").highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(l?"right":"left").tickFormat(d3.format(",.1f"));var b=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=p(i.series.key,a,f,i,w);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+i.left,e.pos[1]+i.top],g.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){g.tooltipHide(e)}),g.on("tooltipHide",function(){h&&e.tooltip.cleanup()}),w.dispatch=g,w.discretebar=t,w.xAxis=n,w.yAxis=r,d3.rebind(w,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","id","showValues","valueFormat"),w.options=e.utils.optionsFunc.bind(w),w.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,w):i},w.width=function(e){return arguments.length?(s=e,w):s},w.height=function(e){return arguments.length?(o=e,w):o},w.color=function(n){return arguments.length?(u=e.utils.getColor(n),t.color(u),w):u},w.showXAxis=function(e){return arguments.length?(a=e,w):a},w.showYAxis=function(e){return arguments.length?(f=e,w):f},w.rightAlignYAxis=function(e){return arguments.length?(l=e,r.orient(e?"right":"left"),w):l},w.staggerLabels=function(e){return arguments.length?(c=e,w):c},w.tooltips=function(e){return arguments.length?(h=e,w):h},w.tooltipContent=function(e){return arguments.length?(p=e,w):p},w.noData=function(e){return arguments.length?(m=e,w):m},w.transitionDuration=function(e){return arguments.length?(y=e,w):y},w},e.models.distribution=function(){function l(e){return e.each(function(e){var a=n-(i==="x"?t.left+t.right:t.top+t.bottom),l=i=="x"?"y":"x",c=d3.select(this);f=f||u;var h=c.selectAll("g.nv-distribution").data([e]),p=h.enter().append("g").attr("class","nvd3 nv-distribution"),d=p.append("g"),v=h.select("g");h.attr("transform","translate("+t.left+","+t.top+")");var m=v.selectAll("g.nv-dist").data(function(e){return e},function(e){return e.key});m.enter().append("g"),m.attr("class",function(e,t){return"nv-dist nv-series-"+t}).style("stroke",function(e,t){return o(e,t)});var g=m.selectAll("line.nv-dist"+i).data(function(e){return e.values});g.enter().append("line").attr(i+"1",function(e,t){return f(s(e,t))}).attr(i+"2",function(e,t){return f(s(e,t))}),m.exit().selectAll("line.nv-dist"+i).attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}).style("stroke-opacity",0).remove(),g.attr("class",function(e,t){return"nv-dist"+i+" nv-dist"+i+"-"+t}).attr(l+"1",0).attr(l+"2",r),g.attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}),f=u.copy()}),l}var t={top:0,right:0,bottom:0,left:0},n=400,r=8,i="x",s=function(e){return e[i]},o=e.utils.defaultColor(),u=d3.scale.linear(),a,f;return l.options=e.utils.optionsFunc.bind(l),l.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,l):t},l.width=function(e){return arguments.length?(n=e,l):n},l.axis=function(e){return arguments.length?(i=e,l):i},l.size=function(e){return arguments.length?(r=e,l):r},l.getData=function(e){return arguments.length?(s=d3.functor(e),l):s},l.scale=function(e){return arguments.length?(u=e,l):u},l.color=function(t){return arguments.length?(o=e.utils.getColor(t),l):o},l},e.models.historicalBarChart=function(){function x(e){return e.each(function(d){var E=d3.select(this),T=this,N=(u||parseInt(E.style("width"))||960)-s.left-s.right,C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom;x.update=function(){E.call(x)},x.container=this,g.disabled=d.map(function(e){return!!e.disabled});if(!y){var k;y={};for(k in g)g[k]instanceof Array?y[k]=g[k].slice(0):y[k]=g[k]}if(!d||!d.length||!d.filter(function(e){return e.values.length}).length){var L=E.selectAll(".nv-noData").data([b]);return L.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),L.attr("x",s.left+N/2).attr("y",s.top+C/2).text(function(e){return e}),x}E.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale();var A=E.selectAll("g.nv-wrap.nv-historicalBarChart").data([d]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),M=A.select("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-barsWrap"),O.append("g").attr("class","nv-legendWrap"),f&&(i.width(N),M.select(".nv-legendWrap").datum(d).call(i),s.top!=i.height()&&(s.top=i.height(),C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom),A.select(".nv-legendWrap").attr("transform","translate(0,"+ -s.top+")")),A.attr("transform","translate("+s.left+","+s.top+")"),h&&M.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)"),t.width(N).height(C).color(d.map(function(e,t){return e.color||o(e,t)}).filter(function(e,t){return!d[t].disabled}));var _=M.select(".nv-barsWrap").datum(d.filter(function(e){return!e.disabled}));_.call(t),l&&(n.scale(v).tickSize(-C,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+m.range()[0]+")"),M.select(".nv-x.nv-axis").call(n)),c&&(r.scale(m).ticks(C/36).tickSize(-N,0),M.select(".nv-y.nv-axis").call(r)),i.dispatch.on("legendClick",function(t,n){t.disabled=!t.disabled,d.filter(function(e){return!e.disabled}).length||d.map(function(e){return e.disabled=!1,A.selectAll(".nv-series").classed("disabled",!1),e}),g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),e.call(x)}),i.dispatch.on("legendDblclick",function(e){d.forEach(function(e){e.disabled=!0}),e.disabled=!1,g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),x.update()}),w.on("tooltipShow",function(e){p&&S(e,T.parentNode)}),w.on("changeState",function(e){typeof e.disabled!="undefined"&&(d.forEach(function(t,n){t.disabled=e.disabled[n]}),g.disabled=e.disabled),x.update()})}),x}var t=e.models.historicalBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s={top:30,right:90,bottom:50,left:90},o=e.utils.defaultColor(),u=null,a=null,f=!1,l=!0,c=!0,h=!1,p=!0,d=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},v,m,g={},y=null,b="No Data Available.",w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),E=0;n.orient("bottom").tickPadding(7),r.orient(h?"right":"left");var S=function(i,s){if(s){var o=d3.select(s).select("svg"),u=o.node()?o.attr("viewBox"):null;if(u){u=u.split(" ");var a=parseInt(o.style("width"))/u[2];i.pos[0]=i.pos[0]*a,i.pos[1]=i.pos[1]*a}}var f=i.pos[0]+(s.offsetLeft||0),l=i.pos[1]+(s.offsetTop||0),c=n.tickFormat()(t.x()(i.point,i.pointIndex)),h=r.tickFormat()(t.y()(i.point,i.pointIndex)),p=d(i.series.key,c,h,i,x);e.tooltip.show([f,l],p,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+s.left,e.pos[1]+s.top],w.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){w.tooltipHide(e)}),w.on("tooltipHide",function(){p&&e.tooltip.cleanup()}),x.dispatch=w,x.bars=t,x.legend=i,x.xAxis=n,x.yAxis=r,d3.rebind(x,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id","interpolate","highlightPoint","clearHighlights","interactive"),x.options=e.utils.optionsFunc.bind(x),x.margin=function(e){return arguments.length?(s.top=typeof e.top!="undefined"?e.top:s.top,s.right=typeof e.right!="undefined"?e.right:s.right,s.bottom=typeof e.bottom!="undefined"?e.bottom:s.bottom,s.left=typeof e.left!="undefined"?e.left:s.left,x):s},x.width=function(e){return arguments.length?(u=e,x):u},x.height=function(e){return arguments.length?(a=e,x):a},x.color=function(t){return arguments.length?(o=e.utils.getColor(t),i.color(o),x):o},x.showLegend=function(e){return arguments.length?(f=e,x):f},x.showXAxis=function(e){return arguments.length?(l=e,x):l},x.showYAxis=function(e){return arguments.length?(c=e,x):c},x.rightAlignYAxis=function(e){return arguments.length?(h=e,r.orient(e?"right":"left"),x):h},x.tooltips=function(e){return arguments.length?(p=e,x):p},x.tooltipContent=function(e){return arguments.length?(d=e,x):d},x.state=function(e){return arguments.length?(g=e,x):g},x.defaultState=function(e){return arguments.length?(y=e,x):y},x.noData=function(e){return arguments.length?(b=e,x):b},x.transitionDuration=function(e){return arguments.length?(E=e,x):E},x},e.models.indentedTree=function(){function g(e){return e.each(function(e){function k(e,t,n){d3.event.stopPropagation();if(d3.event.shiftKey&&!n)return d3.event.shiftKey=!1,e.values&&e.values.forEach(function(e){(e.values||e._values)&&k(e,0,!0)}),!0;if(!O(e))return!0;e.values?(e._values=e.values,e.values=null):(e.values=e._values,e._values=null),g.update()}function L(e){return e._values&&e._values.length?h:e.values&&e.values.length?p:""}function A(e){return e._values&&e._values.length}function O(e){var t=e.values||e._values;return t&&t.length}var t=1,n=d3.select(this),i=d3.layout.tree().children(function(e){return e.values}).size([r,f]);g.update=function(){n.call(g)},e[0]||(e[0]={key:a});var s=i.nodes(e[0]),y=d3.select(this).selectAll("div").data([[s]]),b=y.enter().append("div").attr("class","nvd3 nv-wrap nv-indentedtree"),w=b.append("table"),E=y.select("table").attr("width","100%").attr("class",c);if(o){var S=w.append("thead"),x=S.append("tr");l.forEach(function(e){x.append("th").attr("width",e.width?e.width:"10%").style("text-align",e.type=="numeric"?"right":"left").append("span").text(e.label)})}var T=E.selectAll("tbody").data(function(e){return e});T.enter().append("tbody"),t=d3.max(s,function(e){return e.depth}),i.size([r,t*f]);var N=T.selectAll("tr").data(function(e){return e.filter(function(e){return u&&!e.children?u(e):!0})},function(e,t){return e.id||e.id||++m});N.exit().remove(),N.select("img.nv-treeicon").attr("src",L).classed("folded",A);var C=N.enter().append("tr");l.forEach(function(e,t){var n=C.append("td").style("padding-left",function(e){return(t?0:e.depth*f+12+(L(e)?0:16))+"px"},"important").style("text-align",e.type=="numeric"?"right":"left");t==0&&n.append("img").classed("nv-treeicon",!0).classed("nv-folded",A).attr("src",L).style("width","14px").style("height","14px").style("padding","0 1px").style("display",function(e){return L(e)?"inline-block":"none"}).on("click",k),n.each(function(n){!t&&v(n)?d3.select(this).append("a").attr("href",v).attr("class",d3.functor(e.classes)).append("span"):d3.select(this).append("span"),d3.select(this).select("span").attr("class",d3.functor(e.classes)).text(function(t){return e.format?t[e.key]?e.format(t[e.key]):"-":t[e.key]||"-"})}),e.showCount&&(n.append("span").attr("class","nv-childrenCount"),N.selectAll("span.nv-childrenCount").text(function(e){return e.values&&e.values.length||e._values&&e._values.length?"("+(e.values&&e.values.filter(function(e){return u?u(e):!0}).length||e._values&&e._values.filter(function(e){return u?u(e):!0}).length||0)+")":""}))}),N.order().on("click",function(e){d.elementClick({row:this,data:e,pos:[e.x,e.y]})}).on("dblclick",function(e){d.elementDblclick({row:this,data:e,pos:[e.x,e.y]})}).on("mouseover",function(e){d.elementMouseover({row:this,data:e,pos:[e.x,e.y]})}).on("mouseout",function(e){d.elementMouseout({row:this,data:e,pos:[e.x,e.y]})})}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e4),o=!0,u=!1,a="No Data Available.",f=20,l=[{key:"key",label:"Name",type:"text"}],c=null,h="images/grey-plus.png",p="images/grey-minus.png",d=d3.dispatch("elementClick","elementDblclick","elementMouseover","elementMouseout"),v=function(e){return e.url},m=0;return g.options=e.utils.optionsFunc.bind(g),g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),scatter.color(i),g):i},g.id=function(e){return arguments.length?(s=e,g):s},g.header=function(e){return arguments.length?(o=e,g):o},g.noData=function(e){return arguments.length?(a=e,g):a},g.filterZero=function(e){return arguments.length?(u=e,g):u},g.columns=function(e){return arguments.length?(l=e,g):l},g.tableClass=function(e){return arguments.length?(c=e,g):c},g.iconOpen=function(e){return arguments.length?(h=e,g):h},g.iconClose=function(e){return arguments.length?(p=e,g):p},g.getUrl=function(e){return arguments.length?(v=e,g):v},g},e.models.legend=function(){function c(h){return h.each(function(c){var h=n-t.left-t.right,p=d3.select(this),d=p.selectAll("g.nv-legend").data([c]),v=d.enter().append("g").attr("class","nvd3 nv-legend").append("g"),m=d.select("g");d.attr("transform","translate("+t.left+","+t.top+")");var g=m.selectAll(".nv-series").data(function(e){return e}),y=g.enter().append("g").attr("class","nv-series").on("mouseover",function(e,t){l.legendMouseover(e,t)}).on("mouseout",function(e,t){l.legendMouseout(e,t)}).on("click",function(e,t){l.legendClick(e,t),a&&(f?(c.forEach(function(e){e.disabled=!0}),e.disabled=!1):(e.disabled=!e.disabled,c.every(function(e){return e.disabled})&&c.forEach(function(e){e.disabled=!1})),l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))}).on("dblclick",function(e,t){l.legendDblclick(e,t),a&&(c.forEach(function(e){e.disabled=!0}),e.disabled=!1,l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))});y.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),y.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8"),g.classed("disabled",function(e){return e.disabled}),g.exit().remove(),g.select("circle").style("fill",function(e,t){return e.color||s(e,t)}).style("stroke",function(e,t){return e.color||s(e,t)}),g.select("text").text(i);if(o){var b=[];g.each(function(t,n){var r=d3.select(this).select("text"),i;try{i=r.getComputedTextLength();if(i<=0)throw Error()}catch(s){i=e.utils.calcApproxTextWidth(r)}b.push(i+28)});var w=0,E=0,S=[];while(E<h&&w<b.length)S[w]=b[w],E+=b[w++];w===0&&(w=1);while(E>h&&w>1){S=[],w--;for(var x=0;x<b.length;x++)b[x]>(S[x%w]||0)&&(S[x%w]=b[x]);E=S.reduce(function(e,t,n,r){return e+t})}var T=[];for(var N=0,C=0;N<w;N++)T[N]=C,C+=S[N];g.attr("transform",function(e,t){return"translate("+T[t%w]+","+(5+Math.floor(t/w)*20)+")"}),u?m.attr("transform","translate("+(n-t.right-E)+","+t.top+")"):m.attr("transform","translate(0,"+t.top+")"),r=t.top+t.bottom+Math.ceil(b.length/w)*20}else{var k=5,L=5,A=0,O;g.attr("transform",function(e,r){var i=d3.select(this).select("text").node().getComputedTextLength()+28;return O=L,n<t.left+t.right+O+i&&(L=O=5,k+=20),L+=i,L>A&&(A=L),"translate("+O+","+k+")"}),m.attr("transform","translate("+(n-t.right-A)+","+t.top+")"),r=t.top+t.bottom+k+15}}),c}var t={top:5,right:0,bottom:5,left:0},n=400,r=20,i=function(e){return e.key},s=e.utils.defaultColor(),o=!0,u=!0,a=!0,f=!1,l=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange");return c.dispatch=l,c.options=e.utils.optionsFunc.bind(c),c.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,c):t},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.key=function(e){return arguments.length?(i=e,c):i},c.color=function(t){return arguments.length?(s=e.utils.getColor(t),c):s},c.align=function(e){return arguments.length?(o=e,c):o},c.rightAlign=function(e){return arguments.length?(u=e,c):u},c.updateState=function(e){return arguments.length?(a=e,c):a},c.radioButtonMode=function(e){return arguments.length?(f=e,c):f},c},e.models.line=function(){function m(g){return g.each(function(m){var g=r-n.left-n.right,b=i-n.top-n.bottom,w=d3.select(this);c=t.xScale(),h=t.yScale(),d=d||c,v=v||h;var E=w.selectAll("g.nv-wrap.nv-line").data([m]),S=E.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),T=S.append("defs"),N=S.append("g"),C=E.select("g");N.append("g").attr("class","nv-groups"),N.append("g").attr("class","nv-scatterWrap"),E.attr("transform","translate("+n.left+","+n.top+")"),t.width(g).height(b);var k=E.select(".nv-scatterWrap");k.call(t),T.append("clipPath").attr("id","nv-edge-clip-"+t.id()).append("rect"),E.select("#nv-edge-clip-"+t.id()+" rect").attr("width",g).attr("height",b>0?b:0),C.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":""),k.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":"");var L=E.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});L.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),L.exit().remove(),L.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return s(e,t)}).style("stroke",function(e,t){return s(e,t)}),L.style("stroke-opacity",1).style("fill-opacity",.5);var A=L.selectAll("path.nv-area").data(function(e){return f(e)?[e]:[]});A.enter().append("path").attr("class","nv-area").attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))}).y1(function(e,t){return v(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])}),L.exit().selectAll("path.nv-area").remove(),A.attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))}).y1(function(e,t){return h(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])});var O=L.selectAll("path.nv-line").data(function(e){return[e.values]});O.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))})),O.attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))})),d=c.copy(),v=h.copy()}),m}var t=e.models.scatter(),n={top:0,right:0,bottom:0,left:0},r=960,i=500,s=e.utils.defaultColor(),o=function(e){return e.x},u=function(e){return e.y},a=function(e,t){return!isNaN(u(e,t))&&u(e,t)!==null},f=function(e){return e.area},l=!1,c,h,p="linear";t.size(16).sizeDomain([16,256]);var d,v;return m.dispatch=t.dispatch,m.scatter=t,d3.rebind(m,t,"id","interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","padData","highlightPoint","clearHighlights"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.height=function(e){return arguments.length?(i=e,m):i},m.x=function(e){return arguments.length?(o=e,t.x(e),m):o},m.y=function(e){return arguments.length?(u=e,t.y(e),m):u},m.clipEdge=function(e){return arguments.length?(l=e,m):l},m.color=function(n){return arguments.length?(s=e.utils.getColor(n),t.color(s),m):s},m.interpolate=function(e){return arguments.length?(p=e,m):p},m.defined=function(e){return arguments.length?(a=e,m):a},m.isArea=function(e){return arguments.length?(f=d3.functor(e),m):f},m},e.models.lineChart=function(){function N(m){return m.each(function(m){var x=d3.select(this),C=this,k=(a||parseInt(x.style("width"))||960)-o.left-o.right,L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom;N.update=function(){x.call(N)},N.container=this,b.disabled=m.map(function(e){return!!e.disabled});if(!w){var A;w={};for(A in b)b[A]instanceof Array?w[A]=b[A].slice(0):w[A]=b[A]}if(!m||!m.length||!m.filter(function(e){return e.values.length}).length){var O=x.selectAll(".nv-noData").data([E]);return O.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),O.attr("x",o.left+k/2).attr("y",o.top+L/2).text(function(e){return e}),N}x.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var M=x.selectAll("g.nv-wrap.nv-lineChart").data([m]),_=M.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),D=M.select("g");_.append("rect").style("opacity",0),_.append("g").attr("class","nv-x nv-axis"),_.append("g").attr("class","nv-y nv-axis"),_.append("g").attr("class","nv-linesWrap"),_.append("g").attr("class","nv-legendWrap"),_.append("g").attr("class","nv-interactive"),D.select("rect").attr("width",k).attr("height",L>0?L:0),l&&(i.width(k),D.select(".nv-legendWrap").datum(m).call(i),o.top!=i.height()&&(o.top=i.height(),L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom),M.select(".nv-legendWrap").attr("transform","translate(0,"+ -o.top+")")),M.attr("transform","translate("+o.left+","+o.top+")"),p&&D.select(".nv-y.nv-axis").attr("transform","translate("+k+",0)"),d&&(s.width(k).height(L).margin({left:o.left,top:o.top}).svgContainer(x).xScale(g),M.select(".nv-interactive").call(s)),t.width(k).height(L).color(m.map(function(e,t){return e.color||u(e,t)}).filter(function(e,t){return!m[t].disabled}));var P=D.select(".nv-linesWrap").datum(m.filter(function(e){return!e.disabled}));P.call(t),c&&(n.scale(g).ticks(k/100).tickSize(-L,0),D.select(".nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),D.select(".nv-x.nv-axis").call(n)),h&&(r.scale(y).ticks(L/36).tickSize(-k,0),D.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),N.update()}),s.dispatch.on("elementMousemove",function(i){t.clearHighlights();var a,f,l,c=[];m.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,N.x()),t.highlightPoint(r,f,!0);var s=n.values[f];if(typeof s=="undefined")return;typeof a=="undefined"&&(a=s),typeof l=="undefined"&&(l=N.xScale()(N.x()(s,f))),c.push({key:n.key,value:N.y()(s,f),color:u(n,n.seriesIndex)})});if(c.length>2){var h=N.yScale().invert(i.mouseY),p=Math.abs(N.yScale().domain()[0]-N.yScale().domain()[1]),d=.03*p,g=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);g!==null&&(c[g].highlight=!0)}var y=n.tickFormat()(N.x()(a,f));s.tooltip.position({left:l+o.left,top:i.mouseY+o.top}).chartContainer(C.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:y,series:c})(),s.renderGuideLine(l)}),s.dispatch.on("elementMouseout",function(e){S.tooltipHide(),t.clearHighlights()}),S.on("tooltipShow",function(e){v&&T(e,C.parentNode)}),S.on("changeState",function(e){typeof e.disabled!="undefined"&&m.length===e.disabled.length&&(m.forEach(function(t,n){t.disabled=e.disabled[n]}),b.disabled=e.disabled),N.update()})}),N}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.interactiveGuideline(),o={top:30,right:20,bottom:50,left:60},u=e.utils.defaultColor(),a=null,f=null,l=!0,c=!0,h=!0,p=!1,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=0;n.orient("bottom").tickPadding(7),r.orient(p?"right":"left");var T=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,N);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),N.dispatch=S,N.lines=t,N.legend=i,N.xAxis=n,N.yAxis=r,N.interactiveLayer=s,d3.rebind(N,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id","interpolate"),N.options=e.utils.optionsFunc.bind(N),N.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,N):o},N.width=function(e){return arguments.length?(a=e,N):a},N.height=function(e){return arguments.length?(f=e,N):f},N.color=function(t){return arguments.length?(u=e.utils.getColor(t),i.color(u),N):u},N.showLegend=function(e){return arguments.length?(l=e,N):l},N.showXAxis=function(e){return arguments.length?(c=e,N):c},N.showYAxis=function(e){return arguments.length?(h=e,N):h},N.rightAlignYAxis=function(e){return arguments.length?(p=e,r.orient(e?"right":"left"),N):p},N.useInteractiveGuideline=function(e){return arguments.length?(d=e,e===!0&&(N.interactive(!1),N.useVoronoi(!1)),N):d},N.tooltips=function(e){return arguments.length?(v=e,N):v},N.tooltipContent=function(e){return arguments.length?(m=e,N):m},N.state=function(e){return arguments.length?(b=e,N):b},N.defaultState=function(e){return arguments.length?(w=e,N):w},N.noData=function(e){return arguments.length?(E=e,N):E},N.transitionDuration=function(e){return arguments.length?(x=e,N):x},N},e.models.linePlusBarChart=function(){function T(e){return e.each(function(e){var l=d3.select(this),c=this,v=(a||parseInt(l.style("width"))||960)-u.left-u.right,N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom;T.update=function(){l.call(T)},b.disabled=e.map(function(e){return!!e.disabled});if(!w){var C;w={};for(C in b)b[C]instanceof Array?w[C]=b[C].slice(0):w[C]=b[C]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var k=l.selectAll(".nv-noData").data([E]);return k.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),k.attr("x",u.left+v/2).attr("y",u.top+N/2).text(function(e){return e}),T}l.selectAll(".nv-noData").remove();var L=e.filter(function(e){return!e.disabled&&e.bar}),A=e.filter(function(e){return!e.bar});m=A.filter(function(e){return!e.disabled}).length&&A.filter(function(e){return!e.disabled})[0].values.length?t.xScale():n.xScale(),g=n.yScale(),y=t.yScale();var O=d3.select(this).selectAll("g.nv-wrap.nv-linePlusBar").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y1 nv-axis"),M.append("g").attr("class","nv-y2 nv-axis"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-linesWrap"),M.append("g").attr("class","nv-legendWrap"),p&&(o.width(v/2),_.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(o),u.top!=o.height()&&(u.top=o.height(),N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom),_.select(".nv-legendWrap").attr("transform","translate("+v/2+","+ -u.top+")")),O.attr("transform","translate("+u.left+","+u.top+")"),t.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar})),n.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar}));var D=_.select(".nv-barsWrap").datum(L.length?L:[{values:[]}]),P=_.select(".nv-linesWrap").datum(A[0]&&!A[0].disabled?A:[{values:[]}]);d3.transition(D).call(n),d3.transition(P).call(t),r.scale(m).ticks(v/100).tickSize(-N,0),_.select(".nv-x.nv-axis").attr("transform","translate(0,"+g.range()[0]+")"),d3.transition(_.select(".nv-x.nv-axis")).call(r),i.scale(g).ticks(N/36).tickSize(-v,0),d3.transition(_.select(".nv-y1.nv-axis")).style("opacity",L.length?1:0).call(i),s.scale(y).ticks(N/36).tickSize(L.length?0:-v,0),_.select(".nv-y2.nv-axis").style("opacity",A.length?1:0).attr("transform","translate("+v+",0)"),d3.transition(_.select(".nv-y2.nv-axis")).call(s),o.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),T.update()}),S.on("tooltipShow",function(e){d&&x(e,c.parentNode)}),S.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),b.disabled=t.disabled),T.update()})}),T}var t=e.models.line(),n=e.models.historicalBar(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.legend(),u={top:30,right:60,bottom:50,left:60},a=null,f=null,l=function(e){return e.x},c=function(e){return e.y},h=e.utils.defaultColor(),p=!0,d=!0,v=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},m,g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState");n.padData(!0),t.clipEdge(!1).padData(!0),r.orient("bottom").tickPadding(7).highlightZero(!1),i.orient("left"),s.orient("right");var x=function(n,o){var u=n.pos[0]+(o.offsetLeft||0),a=n.pos[1]+(o.offsetTop||0),f=r.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?i:s).tickFormat()(t.y()(n.point,n.pointIndex)),c=v(n.series.key,f,l,n,T);e.tooltip.show([u,a],c,n.value<0?"n":"s",null,o)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),n.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),n.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){d&&e.tooltip.cleanup()}),T.dispatch=S,T.legend=o,T.lines=t,T.bars=n,T.xAxis=r,T.y1Axis=i,T.y2Axis=s,d3.rebind(T,t,"defined","size","clipVoronoi","interpolate"),T.options=e.utils.optionsFunc.bind(T),T.x=function(e){return arguments.length?(l=e,t.x(e),n.x(e),T):l},T.y=function(e){return arguments.length?(c=e,t.y(e),n.y(e),T):c},T.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,T):u},T.width=function(e){return arguments.length?(a=e,T):a},T.height=function(e){return arguments.length?(f=e,T):f},T.color=function(t){return arguments.length?(h=e.utils.getColor(t),o.color(h),T):h},T.showLegend=function(e){return arguments.length?(p=e,T):p},T.tooltips=function(e){return arguments.length?(d=e,T):d},T.tooltipContent=function(e){return arguments.length?(v=e,T):v},T.state=function(e){return arguments.length?(b=e,T):b},T.defaultState=function(e){return arguments.length?(w=e,T):w},T.noData=function(e){return arguments.length?(E=e,T):E},T},e.models.lineWithFocusChart=function(){function k(e){return e.each(function(e){function R(e){var t=+(e=="e"),n=t?1:-1,r=O/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function U(){a.empty()||a.extent(w),F.data([a.empty()?g.domain():w]).each(function(e,t){var n=g(e[0])-v.range()[0],r=v.range()[1]-g(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",g(e[1])).attr("width",r<0?0:r)})}function z(){w=a.empty()?null:a.extent();var n=a.empty()?g.domain():a.extent();if(Math.abs(n[0]-n[1])<=1)return;T.brush({extent:n,brush:a}),U();var s=P.select(".nv-focus .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}).map(function(e,r){return{key:e.key,values:e.values.filter(function(e,r){return t.x()(e,r)>=n[0]&&t.x()(e,r)<=n[1]})}}));s.call(t),P.select(".nv-focus .nv-x.nv-axis").call(r),P.select(".nv-focus .nv-y.nv-axis").call(i)}var S=d3.select(this),N=this,L=(h||parseInt(S.style("width"))||960)-f.left-f.right,A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d,O=d-l.top-l.bottom;k.update=function(){S.call(k)},k.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var M=S.selectAll(".nv-noData").data([x]);return M.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),M.attr("x",f.left+L/2).attr("y",f.top+A/2).text(function(e){return e}),k}S.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale(),g=n.xScale(),y=n.yScale();var _=S.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([e]),D=_.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),P=_.select("g");D.append("g").attr("class","nv-legendWrap");var H=D.append("g").attr("class","nv-focus");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-linesWrap");var B=D.append("g").attr("class","nv-context");B.append("g").attr("class","nv-x nv-axis"),B.append("g").attr("class","nv-y nv-axis"),B.append("g").attr("class","nv-linesWrap"),B.append("g").attr("class","nv-brushBackground"),B.append("g").attr("class","nv-x nv-brush"),b&&(u.width(L),P.select(".nv-legendWrap").datum(e).call(u),f.top!=u.height()&&(f.top=u.height(),A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d),P.select(".nv-legendWrap").attr("transform","translate(0,"+ -f.top+")")),_.attr("transform","translate("+f.left+","+f.top+")"),t.width(L).height(A).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),n.defined(t.defined()).width(L).height(O).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),P.select(".nv-context").attr("transform","translate(0,"+(A+f.bottom+l.top)+")");var j=P.select(".nv-context .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}));d3.transition(j).call(n),r.scale(v).ticks(L/100).tickSize(-A,0),i.scale(m).ticks(A/36).tickSize(-L,0),P.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+A+")"),a.x(g).on("brush",function(){var e=k.transitionDuration();k.transitionDuration(0),z(),k.transitionDuration(e)}),w&&a.extent(w);var F=P.select(".nv-brushBackground").selectAll("g").data([w||a.extent()]),I=F.enter().append("g");I.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",O),I.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",O);var q=P.select(".nv-x.nv-brush").call(a);q.selectAll("rect").attr("height",O),q.selectAll(".resize").append("path").attr("d",R),z(),s.scale(g).ticks(L/100).tickSize(-O,0),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),d3.transition(P.select(".nv-context .nv-x.nv-axis")).call(s),o.scale(y).ticks(O/36).tickSize(-L,0),d3.transition(P.select(".nv-context .nv-y.nv-axis")).call(o),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),u.dispatch.on("stateChange",function(e){k.update()}),T.on("tooltipShow",function(e){E&&C(e,N.parentNode)})}),k}var t=e.models.line(),n=e.models.line(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.axis(),u=e.models.legend(),a=d3.svg.brush(),f={top:30,right:30,bottom:30,left:60},l={top:0,right:30,bottom:20,left:60},c=e.utils.defaultColor(),h=null,p=null,d=100,v,m,g,y,b=!0,w=null,E=!0,S=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},x="No Data Available.",T=d3.dispatch("tooltipShow","tooltipHide","brush"),N=0;t.clipEdge(!0),n.interactive(!1),r.orient("bottom").tickPadding(5),i.orient("left"),s.orient("bottom").tickPadding(5),o.orient("left");var C=function(n,s){var o=n.pos[0]+(s.offsetLeft||0),u=n.pos[1]+(s.offsetTop||0),a=r.tickFormat()(t.x()(n.point,n.pointIndex)),f=i.tickFormat()(t.y()(n.point,n.pointIndex)),l=S(n.series.key,a,f,n,k);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+f.left,e.pos[1]+f.top],T.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){E&&e.tooltip.cleanup()}),k.dispatch=T,k.legend=u,k.lines=t,k.lines2=n,k.xAxis=r,k.yAxis=i,k.x2Axis=s,k.y2Axis=o,d3.rebind(k,t,"defined","isArea","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id"),k.options=e.utils.optionsFunc.bind(k),k.x=function(e){return arguments.length?(t.x(e),n.x(e),k):t.x},k.y=function(e){return arguments.length?(t.y(e),n.y(e),k):t.y},k.margin=function(e){return arguments.length?(f.top=typeof e.top!="undefined"?e.top:f.top,f.right=typeof e.right!="undefined"?e.right:f.right,f.bottom=typeof e.bottom!="undefined"?e.bottom:f.bottom,f.left=typeof e.left!="undefined"?e.left:f.left,k):f},k.margin2=function(e){return arguments.length?(l=e,k):l},k.width=function(e){return arguments.length?(h=e,k):h},k.height=function(e){return arguments.length?(p=e,k):p},k.height2=function(e){return arguments.length?(d=e,k):d},k.color=function(t){return arguments.length?(c=e.utils.getColor(t),u.color(c),k):c},k.showLegend=function(e){return arguments.length?(b=e,k):b},k.tooltips=function(e){return arguments.length?(E=e,k):E},k.tooltipContent=function(e){return arguments.length?(S=e,k):S},k.interpolate=function(e){return arguments.length?(t.interpolate(e),n.interpolate(e),k):t.interpolate()},k.noData=function(e){return arguments.length?(x=e,k):x},k.xTickFormat=function(e){return arguments.length?(r.tickFormat(e),s.tickFormat(e),k):r.tickFormat()},k.yTickFormat=function(e){return arguments.length?(i.tickFormat(e),o.tickFormat(e),k):i.tickFormat()},k.brushExtent=function(e){return arguments.length?(w=e,k):w},k.transitionDuration=function(e){return arguments.length?(N=e,k):N},k},e.models.linePlusBarWithFocusChart=function(){function B(e){return e.each(function(e){function tt(e){var t=+(e=="e"),n=t?1:-1,r=I/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function nt(){h.empty()||h.extent(x),Y.data([h.empty()?k.domain():x]).each(function(e,t){var n=k(e[0])-k.range()[0],r=k.range()[1]-k(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",k(e[1])).attr("width",r<0?0:r)})}function rt(){x=h.empty()?null:h.extent(),S=h.empty()?k.domain():h.extent(),D.brush({extent:S,brush:h}),nt(),r.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),t.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var n=$.select(".nv-focus .nv-barsWrap").datum(R.length?R.map(function(e,t){return{key:e.key,values:e.values.filter(function(e,t){return r.x()(e,t)>=S[0]&&r.x()(e,t)<=S[1]})}}):[{values:[]}]),i=$.select(".nv-focus .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U.map(function(e,n){return{key:e.key,values:e.values.filter(function(e,n){return t.x()(e,n)>=S[0]&&t.x()(e,n)<=S[1]})}}));R.length?C=r.xScale():C=t.xScale(),s.scale(C).ticks(j/100).tickSize(-F,0),s.domain([Math.ceil(S[0]),Math.floor(S[1])]),$.select(".nv-x.nv-axis").call(s),n.call(r),i.call(t),$.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L.range()[0]+")"),u.scale(L).ticks(F/36).tickSize(-j,0),$.select(".nv-focus .nv-y1.nv-axis").style("opacity",R.length?1:0),a.scale(A).ticks(F/36).tickSize(R.length?0:-j,0),$.select(".nv-focus .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+C.range()[1]+",0)"),$.select(".nv-focus .nv-y1.nv-axis").call(u),$.select(".nv-focus .nv-y2.nv-axis").call(a)}var N=d3.select(this),P=this,j=(v||parseInt(N.style("width"))||960)-p.left-p.right,F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g,I=g-d.top-d.bottom;B.update=function(){N.call(B)},B.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=N.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",p.left+j/2).attr("y",p.top+F/2).text(function(e){return e}),B}N.selectAll(".nv-noData").remove();var R=e.filter(function(e){return!e.disabled&&e.bar}),U=e.filter(function(e){return!e.bar});C=r.xScale(),k=o.scale(),L=r.yScale(),A=t.yScale(),O=i.yScale(),M=n.yScale();var z=e.filter(function(e){return!e.disabled&&e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})}),W=e.filter(function(e){return!e.disabled&&!e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})});C.range([0,j]),k.domain(d3.extent(d3.merge(z.concat(W)),function(e){return e.x})).range([0,j]);var X=N.selectAll("g.nv-wrap.nv-linePlusBar").data([e]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),$=X.select("g");V.append("g").attr("class","nv-legendWrap");var J=V.append("g").attr("class","nv-focus");J.append("g").attr("class","nv-x nv-axis"),J.append("g").attr("class","nv-y1 nv-axis"),J.append("g").attr("class","nv-y2 nv-axis"),J.append("g").attr("class","nv-barsWrap"),J.append("g").attr("class","nv-linesWrap");var K=V.append("g").attr("class","nv-context");K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y1 nv-axis"),K.append("g").attr("class","nv-y2 nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-linesWrap"),K.append("g").attr("class","nv-brushBackground"),K.append("g").attr("class","nv-x nv-brush"),E&&(c.width(j/2),$.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(c),p.top!=c.height()&&(p.top=c.height(),F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g),$.select(".nv-legendWrap").attr("transform","translate("+j/2+","+ -p.top+")")),X.attr("transform","translate("+p.left+","+p.top+")"),i.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),n.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var Q=$.select(".nv-context .nv-barsWrap").datum(R.length?R:[{values:[]}]),G=$.select(".nv-context .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U);$.select(".nv-context").attr("transform","translate(0,"+(F+p.bottom+d.top)+")"),Q.call(i),G.call(n),h.x(k).on("brush",rt),x&&h.extent(x);var Y=$.select(".nv-brushBackground").selectAll("g").data([x||h.extent()]),Z=Y.enter().append("g");Z.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",I),Z.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",I);var et=$.select(".nv-x.nv-brush").call(h);et.selectAll("rect").attr("height",I),et.selectAll(".resize").append("path").attr("d",tt),o.ticks(j/100).tickSize(-I,0),$.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+O.range()[0]+")"),$.select(".nv-context .nv-x.nv-axis").call(o),f.scale(O).ticks(I/36).tickSize(-j,0),$.select(".nv-context .nv-y1.nv-axis").style("opacity",R.length?1:0).attr("transform","translate(0,"+k.range()[0]+")"),$.select(".nv-context .nv-y1.nv-axis").call(f),l.scale(M).ticks(I/36).tickSize(R.length?0:-j,0),$.select(".nv-context .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+k.range()[1]+",0)"),$.select(".nv-context .nv-y2.nv-axis").call(l),c.dispatch.on("stateChange",function(e){B.update()}),D.on("tooltipShow",function(e){T&&H(e,P.parentNode)}),rt()}),B}var t=e.models.line(),n=e.models.line(),r=e.models.historicalBar(),i=e.models.historicalBar(),s=e.models.axis(),o=e.models.axis(),u=e.models.axis(),a=e.models.axis(),f=e.models.axis(),l=e.models.axis(),c=e.models.legend(),h=d3.svg.brush(),p={top:30,right:30,bottom:30,left:60},d={top:0,right:30,bottom:20,left:60},v=null,m=null,g=100,y=function(e){return e.x},b=function(e){return e.y},w=e.utils.defaultColor(),E=!0,S,x=null,T=!0,N=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},C,k,L,A,O,M,_="No Data Available.",D=d3.dispatch("tooltipShow","tooltipHide","brush"),P=0;t.clipEdge(!0),n.interactive(!1),s.orient("bottom").tickPadding(5),u.orient("left"),a.orient("right"),o.orient("bottom").tickPadding(5),f.orient("left"),l.orient("right");var H=function(n,r){S&&(n.pointIndex+=Math.ceil(S[0]));var i=n.pos[0]+(r.offsetLeft||0),o=n.pos[1]+(r.offsetTop||0),f=s.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?u:a).tickFormat()(t.y()(n.point,n.pointIndex)),c=N(n.series.key,f,l,n,B);e.tooltip.show([i,o],c,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),r.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),r.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),D.on("tooltipHide",function(){T&&e.tooltip.cleanup()}),B.dispatch=D,B.legend=c,B.lines=t,B.lines2=n,B.bars=r,B.bars2=i,B.xAxis=s,B.x2Axis=o,B.y1Axis=u,B.y2Axis=a,B.y3Axis=f,B.y4Axis=l,d3.rebind(B,t,"defined","size","clipVoronoi","interpolate"),B.options=e.utils.optionsFunc.bind(B),B.x=function(e){return arguments.length?(y=e,t.x(e),r.x(e),B):y},B.y=function(e){return arguments.length?(b=e,t.y(e),r.y(e),B):b},B.margin=function(e){return arguments.length?(p.top=typeof e.top!="undefined"?e.top:p.top,p.right=typeof e.right!="undefined"?e.right:p.right,p.bottom=typeof e.bottom!="undefined"?e.bottom:p.bottom,p.left=typeof e.left!="undefined"?e.left:p.left,B):p},B.width=function(e){return arguments.length?(v=e,B):v},B.height=function(e){return arguments.length?(m=e,B):m},B.color=function(t){return arguments.length?(w=e.utils.getColor(t),c.color(w),B):w},B.showLegend=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(T=e,B):T},B.tooltipContent=function(e){return arguments.length?(N=e,B):N},B.noData=function(e){return arguments.length?(_=e,B):_},B.brushExtent=function(e){return arguments.length?(x=e,B):x},B},e.models.multiBar=function(){function C(e){return e.each(function(e){var g=n-t.left-t.right,C=r-t.top-t.bottom,k=d3.select(this);d&&e.length&&(d=[{values:e[0].values.map(function(e){return{x:e.x,y:0,series:e.series,size:.01}})}]),c&&(e=d3.layout.stack().offset(h).values(function(e){return e.values}).y(a)(!e.length&&d?d:e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),c&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i,i-=t.size):(t.y1=t.size+r,r+=t.size)})});var L=y&&b?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});i.domain(y||d3.merge(L).map(function(e){return e.x})).rangeBands(w||[0,g],S),s.domain(b||d3.extent(d3.merge(L).map(function(e){return c?e.y>0?e.y1:e.y1+e.y:e.y}).concat(f))).range(E||[C,0]),i.domain()[0]===i.domain()[1]&&(i.domain()[0]?i.domain([i.domain()[0]-i.domain()[0]*.01,i.domain()[1]+i.domain()[1]*.01]):i.domain([-1,1])),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]+s.domain()[0]*.01,s.domain()[1]-s.domain()[1]*.01]):s.domain([-1,1])),T=T||i,N=N||s;var A=k.selectAll("g.nv-wrap.nv-multibar").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),M=O.append("defs"),_=O.append("g"),D=A.select("g");_.append("g").attr("class","nv-groups"),A.attr("transform","translate("+t.left+","+t.top+")"),M.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),A.select("#nv-edge-clip-"+o+" rect").attr("width",g).attr("height",C),D.attr("clip-path",l?"url(#nv-edge-clip-"+o+")":"");var P=A.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});P.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),P.exit().selectAll("rect.nv-bar").attr("y",function(e){return c?N(e.y0):N(0)}).attr("height",0).remove(),P.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return p(e,t)}).style("stroke",function(e,t){return p(e,t)}),P.style("stroke-opacity",1).style("fill-opacity",.75);var H=P.selectAll("rect.nv-bar").data(function(t){return d&&!e.length?d.values:t.values});H.exit().remove();var B=H.enter().append("rect").attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("x",function(t,n,r){return c?0:r*i.rangeBand()/e.length}).attr("y",function(e){return N(c?e.y0:0)}).attr("height",0).attr("width",i.rangeBand()/(c?1:e.length)).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"});H.style("fill",function(e,t,n){return p(e,n,t)}).style("stroke",function(e,t,n){return p(e,n,t)}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"}),v&&(m||(m=e.map(function(){return!0})),H.style("fill",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()})),c?H.attr("y",function(e,t){return s(c?e.y1:0)}).attr("height",function(e,t){return Math.max(Math.abs(s(e.y+(c?e.y0:0))-s(c?e.y0:0)),1)}).attr("x",function(t,n){return c?0:t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/(c?1:e.length)):H.attr("x",function(t,n){return t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/e.length).attr("y",function(e,t){return a(e,t)<0?s(0):s(0)-s(a(e,t))<1?s(0)-1:s(a(e,t))||0}).attr("height",function(e,t){return Math.max(Math.abs(s(a(e,t))-s(0)),1)||0}),T=i.copy(),N=s.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=d3.scale.ordinal(),s=d3.scale.linear(),o=Math.floor(Math.random()*1e4),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=!0,c=!1,h="zero",p=e.utils.defaultColor(),d=!1,v=null,m,g=1200,y,b,w,E,S=.1,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(i=e,C):i},C.yScale=function(e){return arguments.length?(s=e,C):s},C.xDomain=function(e){return arguments.length?(y=e,C):y},C.yDomain=function(e){return arguments.length?(b=e,C):b},C.xRange=function(e){return arguments.length?(w=e,C):w},C.yRange=function(e){return arguments.length?(E=e,C):E},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(c=e,C):c},C.stackOffset=function(e){return arguments.length?(h=e,C):h},C.clipEdge=function(e){return arguments.length?(l=e,C):l},C.color=function(t){return arguments.length?(p=e.utils.getColor(t),C):p},C.barColor=function(t){return arguments.length?(v=e.utils.getColor(t),C):v},C.disabled=function(e){return arguments.length?(m=e,C):m},C.id=function(e){return arguments.length?(o=e,C):o},C.hideable=function(e){return arguments.length?(d=e,C):d},C.delay=function(e){return arguments.length?(g=e,C):g},C.groupSpacing=function(e){return arguments.length?(S=e,C):S},C},e.models.multiBarChart=function(){function A(e){return e.each(function(e){var b=d3.select(this),k=this,O=(u||parseInt(b.style("width"))||960)-o.left-o.right,M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom;A.update=function(){b.call(A)},A.container=this,S.disabled=e.map(function(e){return!!e.disabled});if(!x){var _;x={};for(_ in S)S[_]instanceof Array?x[_]=S[_].slice(0):x[_]=S[_]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var D=b.selectAll(".nv-noData").data([T]);return D.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),D.attr("x",o.left+O/2).attr("y",o.top+M/2).text(function(e){return e}),A}b.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();var P=b.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([e]),H=P.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),B=P.select("g");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-barsWrap"),H.append("g").attr("class","nv-legendWrap"),H.append("g").attr("class","nv-controlsWrap"),c&&(i.width(O-C()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),B.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom),B.select(".nv-legendWrap").attr("transform","translate("+C()+","+ -o.top+")"));if(l){var j=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(C()).color(["#444","#444","#444"]),B.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -o.top+")").call(s)}P.attr("transform","translate("+o.left+","+o.top+")"),d&&B.select(".nv-y.nv-axis").attr("transform","translate("+O+",0)"),t.disabled(e.map(function(e){return e.disabled})).width(O).height(M).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var F=B.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));F.call(t);if(h){n.scale(w).ticks(O/100).tickSize(-M,0),B.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),B.select(".nv-x.nv-axis").call(n);var I=B.select(".nv-x.nv-axis > g").selectAll("g");I.selectAll("line, text").style("opacity",1);if(m){var q=function(e,t){return"translate("+e+","+t+")"},R=5,U=17;I.selectAll("text").attr("transform",function(e,t,n){return q(0,n%2==0?R:U)});var z=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;B.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(e,t){return q(0,t===0||z%2!==0?U:R)})}v&&I.filter(function(t,n){return n%Math.ceil(e[0].values.length/(O/100))!==0}).selectAll("text, line").style("opacity",0),g&&I.selectAll(".tick text").attr("transform","rotate("+g+" 0,0)").style("text-anchor",g>0?"start":"end"),B.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}p&&(r.scale(E).ticks(M/36).tickSize(-O,0),B.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){S=e,N.stateChange(S),A.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;j=j.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}S.stacked=t.stacked(),N.stateChange(S),A.update()}),N.on("tooltipShow",function(e){y&&L(e,k.parentNode)}),N.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),S.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),S.stacked=n.stacked),A.update()})}),A}var t=e.models.multiBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=!1,g=0,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},w,E,S={stacked:!1},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=function(){return l?180:0},k=0;t.stacked(!1),n.orient("bottom").tickPadding(7).highlightZero(!0).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(d?"right":"left").tickFormat(d3.format(",.1f")),s.updateState(!1);var L=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,A);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],N.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){y&&e.tooltip.cleanup()}),A.dispatch=N,A.multibar=t,A.legend=i,A.xAxis=n,A.yAxis=r,d3.rebind(A,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","stacked","stackOffset","delay","barColor","groupSpacing"),A.options=e.utils.optionsFunc.bind(A),A.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,A):o},A.width=function(e){return arguments.length?(u=e,A):u},A.height=function(e){return arguments.length?(a=e,A):a},A.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),A):f},A.showControls=function(e){return arguments.length?(l=e,A):l},A.showLegend=function(e){return arguments.length?(c=e,A):c},A.showXAxis=function(e){return arguments.length?(h=e,A):h},A.showYAxis=function(e){return arguments.length?(p=e,A):p},A.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),A):d},A.reduceXTicks=function(e){return arguments.length?(v=e,A):v},A.rotateLabels=function(e){return arguments.length?(g=e,A):g},A.staggerLabels=function(e){return arguments.length?(m=e,A):m},A.tooltip=function(e){return arguments.length?(b=e,A):b},A.tooltips=function(e){return arguments.length?(y=e,A):y},A.tooltipContent=function(e){return arguments.length?(b=e,A):b},A.state=function(e){return arguments.length?(S=e,A):S},A.defaultState=function(e){return arguments.length?(x=e,A):x},A.noData=function(e){return arguments.length?(T=e,A):T},A.transitionDuration=function(e){return arguments.length?(k=e,A):k},A},e.models.multiBarHorizontal=function(){function C(e){return e.each(function(e){var i=n-t.left-t.right,y=r-t.top-t.bottom,C=d3.select(this);p&&(e=d3.layout.stack().offset("zero").values(function(e){return e.values}).y(a)(e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),p&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i-t.size,i-=t.size):(t.y1=r,r+=t.size)})});var k=b&&w?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});s.domain(b||d3.merge(k).map(function(e){return e.x})).rangeBands(E||[0,y],.1),o.domain(w||d3.extent(d3.merge(k).map(function(e){return p?e.y>0?e.y1+e.y:e.y1:e.y}).concat(f))),d&&!p?o.range(S||[o.domain()[0]<0?m:0,i-(o.domain()[1]>0?m:0)]):o.range(S||[0,i]),T=T||s,N=N||d3.scale.linear().domain(o.domain()).range([o(0),o(0)]);var L=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([e]),A=L.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),O=A.append("defs"),M=A.append("g"),_=L.select("g");M.append("g").attr("class","nv-groups"),L.attr("transform","translate("+t.left+","+t.top+")");var D=L.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return l(e,t)}).style("stroke",function(e,t){return l(e,t)}),D.style("stroke-opacity",1).style("fill-opacity",.75);var P=D.selectAll("g.nv-bar").data(function(e){return e.values});P.exit().remove();var H=P.enter().append("g").attr("transform",function(t,n,r){return"translate("+N(p?t.y0:0)+","+(p?0:r*s.rangeBand()/e.length+s(u(t,n)))+")"});H.append("rect").attr("width",0).attr("height",s.rangeBand()/(p?1:e.length)),P.on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[o(a(t,n)+(p?t.y0:0)),s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.append("text"),d&&!p?(P.select("text").attr("text-anchor",function(e,t){return a(e,t)<0?"end":"start"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return g(a(e,t))}),P.select("text").attr("x",function(e,t){return a(e,t)<0?-4:o(a(e,t))-o(0)+4})):P.selectAll("text").text(""),v&&!p?(H.append("text").classed("nv-bar-label",!0),P.select("text.nv-bar-label").attr("text-anchor",function(e,t){return a(e,t)<0?"start":"end"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return u(e,t)}),P.select("text.nv-bar-label").attr("x",function(e,t){return a(e,t)<0?o(0)-o(a(e,t))+4:-4})):P.selectAll("text.nv-bar-label").text(""),P.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}),c&&(h||(h=e.map(function(){return!0})),P.style("fill",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()})),p?P.attr("transform",function(e,t){return"translate("+o(e.y1)+","+s(u(e,t))+")"}).select("rect").attr("width",function(e,t){return Math.abs(o(a(e,t)+e.y0)-o(e.y0))}).attr("height",s.rangeBand()):P.attr("transform",function(t,n){return"translate("+(a(t,n)<0?o(a(t,n)):o(0))+","+(t.series*s.rangeBand()/e.length+s(u(t,n)))+")"}).select("rect").attr("height",s.rangeBand()/e.length).attr("width",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(0)),1)}),T=s.copy(),N=o.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=null,h,p=!1,d=!1,v=!1,m=60,g=d3.format(",.2f"),y=1200,b,w,E,S,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(s=e,C):s},C.yScale=function(e){return arguments.length?(o=e,C):o},C.xDomain=function(e){return arguments.length?(b=e,C):b},C.yDomain=function(e){return arguments.length?(w=e,C):w},C.xRange=function(e){return arguments.length?(E=e,C):E},C.yRange=function(e){return arguments.length?(S=e,C):S},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(p=e,C):p},C.color=function(t){return arguments.length?(l=e.utils.getColor(t),C):l},C.barColor=function(t){return arguments.length?(c=e.utils.getColor(t),C):c},C.disabled=function(e){return arguments.length?(h=e,C):h},C.id=function(e){return arguments.length?(i=e,C):i},C.delay=function(e){return arguments.length?(y=e,C):y},C.showValues=function(e){return arguments.length?(d=e,C):d},C.showBarLabels=function(e){return arguments.length?(v=e,C):v},C.valueFormat=function(e){return arguments.length?(g=e,C):g},C.valuePadding=function(e){return arguments.length?(m=e,C):m},C},e.models.multiBarHorizontalChart=function(){function C(e){return e.each(function(e){var d=d3.select(this),m=this,T=(u||parseInt(d.style("width"))||960)-o.left-o.right,k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom;C.update=function(){d.call(C)},C.container=this,b.disabled=e.map(function(e){return!!e.disabled});if(!w){var L;w={};for(L in b)b[L]instanceof Array?w[L]=b[L].slice(0):w[L]=b[L]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var A=d.selectAll(".nv-noData").data([E]);return A.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),A.attr("x",o.left+T/2).attr("y",o.top+k/2).text(function(e){return e}),C}d.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var O=d.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-legendWrap"),M.append("g").attr("class","nv-controlsWrap"),c&&(i.width(T-x()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),_.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom),_.select(".nv-legendWrap").attr("transform","translate("+x()+","+ -o.top+")"));if(l){var D=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(x()).color(["#444","#444","#444"]),_.select(".nv-controlsWrap").datum(D).attr("transform","translate(0,"+ -o.top+")").call(s)}O.attr("transform","translate("+o.left+","+o.top+")"),t.disabled(e.map(function(e){return e.disabled})).width(T).height(k).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var P=_.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));P.call(t);if(h){n.scale(g).ticks(k/24).tickSize(-T,0),_.select(".nv-x.nv-axis").call(n);var H=_.select(".nv-x.nv-axis").selectAll("g");H.selectAll("line, text")}p&&(r.scale(y).ticks(T/100).tickSize(-k,0),_.select(".nv-y.nv-axis").attr("transform","translate(0,"+k+")"),_.select(".nv-y.nv-axis").call(r)),_.select(".nv-zeroLine line").attr("x1",y(0)).attr("x2",y(0)).attr("y1",0).attr("y2",-k),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),C.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;D=D.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}b.stacked=t.stacked(),S.stateChange(b),C.update()}),S.on("tooltipShow",function(e){v&&N(e,m.parentNode)}),S.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),b.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),b.stacked=n.stacked),C.update()})}),C}var t=e.models.multiBarHorizontal(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend().height(30),s=e.models.legend().height(30),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+" - "+t+"</h3>"+"<p>"+n+"</p>"},g,y,b={stacked:d},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=function(){return l?180:0},T=0;t.stacked(d),n.orient("left").tickPadding(5).highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient("bottom").tickFormat(d3.format(",.1f")),s.updateState(!1);var N=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,C);e.tooltip.show([o,u],l,i.value<0?"e":"w",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),C.dispatch=S,C.multibar=t,C.legend=i,C.xAxis=n,C.yAxis=r,d3.rebind(C,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","delay","showValues","showBarLabels","valueFormat","stacked","barColor"),C.options=e.utils.optionsFunc.bind(C),C.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,C):o},C.width=function(e){return arguments.length?(u=e,C):u},C.height=function(e){return arguments.length?(a=e,C):a},C.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),C):f},C.showControls=function(e){return arguments.length?(l=e,C):l},C.showLegend=function(e){return arguments.length?(c=e,C):c},C.showXAxis=function(e){return arguments.length?(h=e,C):h},C.showYAxis=function(e){return arguments.length?(p=e,C):p},C.tooltip=function(e){return arguments.length?(m=e,C):m},C.tooltips=function(e){return arguments.length?(v=e,C):v},C.tooltipContent=function(e){return arguments.length?(m=e,C):m},C.state=function(e){return arguments.length?(b=e,C):b},C.defaultState=function(e){return arguments.length?(w=e,C):w},C.noData=function(e){return arguments.length?(E=e,C):E},C.transitionDuration=function(e){return arguments.length?(T=e,C):T},C},e.models.multiChart=function(){function C(e){return e.each(function(e){var u=d3.select(this),f=this;C.update=function(){u.call(C)},C.container=this;var k=(r||parseInt(u.style("width"))||960)-t.left-t.right,L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom,A=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==1}),O=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==2}),M=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==1}),_=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==2}),D=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==1}),P=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==2}),H=e.filter(function(e){return!e.disabled&&e.yAxis==1}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})}),B=e.filter(function(e){return!e.disabled&&e.yAxis==2}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})});a.domain(d3.extent(d3.merge(H.concat(B)),function(e){return e.x})).range([0,k]);var j=u.selectAll("g.wrap.multiChart").data([e]),F=j.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");F.append("g").attr("class","x axis"),F.append("g").attr("class","y1 axis"),F.append("g").attr("class","y2 axis"),F.append("g").attr("class","lines1Wrap"),F.append("g").attr("class","lines2Wrap"),F.append("g").attr("class","bars1Wrap"),F.append("g").attr("class","bars2Wrap"),F.append("g").attr("class","stack1Wrap"),F.append("g").attr("class","stack2Wrap"),F.append("g").attr("class","legendWrap");var I=j.select("g");s&&(x.width(k/2),I.select(".legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.yAxis==1?"":" (right axis)"),e})).call(x),t.top!=x.height()&&(t.top=x.height(),L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom),I.select(".legendWrap").attr("transform","translate("+k/2+","+ -t.top+")")),d.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="line"})),v.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="line"})),m.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="bar"})),g.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="bar"})),y.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="area"})),b.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="area"})),I.attr("transform","translate("+t.left+","+t.top+")");var q=I.select(".lines1Wrap").datum(A),R=I.select(".bars1Wrap").datum(M),U=I.select(".stack1Wrap").datum(D),z=I.select(".lines2Wrap").datum(O),W=I.select(".bars2Wrap").datum(_),X=I.select(".stack2Wrap").datum(P),V=D.length?D.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[],$=P.length?P.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[];h.domain(l||d3.extent(d3.merge(H).concat(V),function(e){return e.y})).range([0,L]),p.domain(c||d3.extent(d3.merge(B).concat($),function(e){return e.y})).range([0,L]),d.yDomain(h.domain()),m.yDomain(h.domain()),y.yDomain(h.domain()),v.yDomain(p.domain()),g.yDomain(p.domain()),b.yDomain(p.domain()),D.length&&d3.transition(U).call(y),P.length&&d3.transition(X).call(b),M.length&&d3.transition(R).call(m),_.length&&d3.transition(W).call(g),A.length&&d3.transition(q).call(d),O.length&&d3.transition(z).call(v),w.ticks(k/100).tickSize(-L,0),I.select(".x.axis").attr("transform","translate(0,"+L+")"),d3.transition(I.select(".x.axis")).call(w),E.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y1.axis")).call(E),S.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y2.axis")).call(S),I.select(".y2.axis").style("opacity",B.length?1:0).attr("transform","translate("+a.range()[1]+",0)"),x.dispatch.on("stateChange",function(e){C.update()}),T.on("tooltipShow",function(e){o&&N(e,f.parentNode)})}),C}var t={top:30,right:20,bottom:50,left:60},n=d3.scale.category20().range(),r=null,i=null,s=!0,o=!0,u=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},a,f,l,c,a=d3.scale.linear(),h=d3.scale.linear(),p=d3.scale.linear(),d=e.models.line().yScale(h),v=e.models.line().yScale(p),m=e.models.multiBar().stacked(!1).yScale(h),g=e.models.multiBar().stacked(!1).yScale(p),y=e.models.stackedArea().yScale(h),b=e.models.stackedArea().yScale(p),w=e.models.axis().scale(a).orient("bottom").tickPadding(5),E=e.models.axis().scale(h).orient("left"),S=e.models.axis().scale(p).orient("right"),x=e.models.legend().height(30),T=d3.dispatch("tooltipShow","tooltipHide"),N=function(t,n){var r=t.pos[0]+(n.offsetLeft||0),i=t.pos[1]+(n.offsetTop||0),s=w.tickFormat()(d.x()(t.point,t.pointIndex)),o=(t.series.yAxis==2?S:E).tickFormat()(d.y()(t.point,t.pointIndex)),a=u(t.series.key,s,o,t,C);e.tooltip.show([r,i],a,undefined,undefined,n.offsetParent)};return d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),m.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),m.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),g.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),g.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),y.dispatch.on("tooltipShow",function(e){if(!Math.round(y.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),y.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),b.dispatch.on("tooltipShow",function(e){if(!Math.round(b.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),b.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){o&&e.tooltip.cleanup()}),C.dispatch=T,C.lines1=d,C.lines2=v,C.bars1=m,C.bars2=g,C.stack1=y,C.stack2=b,C.xAxis=w,C.yAxis1=E,C.yAxis2=S,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(getX=e,d.x(e),m.x(e),C):getX},C.y=function(e){return arguments.length?(getY=e,d.y(e),m.y(e),C):getY},C.yDomain1=function(e){return arguments.length?(l=e,C):l},C.yDomain2=function(e){return arguments.length?(c=e,C):c},C.margin=function(e){return arguments.length?(t=e,C):t},C.width=function(e){return arguments.length?(r=e,C):r},C.height=function(e){return arguments.length?(i=e,C):i},C.color=function(e){return arguments.length?(n=e,x.color(e),C):n},C.showLegend=function(e){return arguments.length?(s=e,C):s},C.tooltips=function(e){return arguments.length?(o=e,C):o},C.tooltipContent=function(e){return arguments.length?(u=e,C):u},C},e.models.ohlcBar=function(){function x(e){return e.each(function(e){var g=n-t.left-t.right,x=r-t.top-t.bottom,T=d3.select(this);s.domain(y||d3.extent(e[0].values.map(u).concat(p))),v?s.range(w||[g*.5/e[0].values.length,g*(e[0].values.length-.5)/e[0].values.length]):s.range(w||[0,g]),o.domain(b||[d3.min(e[0].values.map(h).concat(d)),d3.max(e[0].values.map(c).concat(d))]).range(E||[x,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([e[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-ticks"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){S.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",g).attr("height",x),A.attr("clip-path",m?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-ticks").selectAll(".nv-tick").data(function(e){return e});O.exit().remove();var M=O.enter().append("path").attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"}).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),S.elementMouseover({point:t,series:e[0],pos:[s(u(t,n)),o(a(t,n))],pointIndex:n,seriesIndex:0,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),S.elementMouseout({point:t,series:e[0],pointIndex:n,seriesIndex:0,e:d3.event})}).on("click",function(e,t){S.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){S.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}),d3.transition(O).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"})}),x}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=function(e){return e.open},l=function(e){return e.close},c=function(e){return e.high},h=function(e){return e.low},p=[],d=[],v=!1,m=!0,g=e.utils.defaultColor(),y,b,w,E,S=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return x.dispatch=S,x.options=e.utils.optionsFunc.bind(x),x.x=function(e){return arguments.length?(u=e,x):u},x.y=function(e){return arguments.length?(a=e,x):a},x.open=function(e){return arguments.length?(f=e,x):f},x.close=function(e){return arguments.length?(l=e,x):l},x.high=function(e){return arguments.length?(c=e,x):c},x.low=function(e){return arguments.length?(h=e,x):h},x.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,x):t},x.width=function(e){return arguments.length?(n=e,x):n},x.height=function(e){return arguments.length?(r=e,x):r},x.xScale=function(e){return arguments.length?(s=e,x):s},x.yScale=function(e){return arguments.length?(o=e,x):o},x.xDomain=function(e){return arguments.length?(y=e,x):y},x.yDomain=function(e){return arguments.length?(b=e,x):b},x.xRange=function(e){return arguments.length?(w=e,x):w},x.yRange=function(e){return arguments.length?(E=e,x):E},x.forceX=function(e){return arguments.length?(p=e,x):p},x.forceY=function(e){return arguments.length?(d=e,x):d},x.padData=function(e){return arguments.length?(v=e,x):v},x.clipEdge=function(e){return arguments.length?(m=e,x):m},x.color=function(t){return arguments.length?(g=e.utils.getColor(t),x):g},x.id=function(e){return arguments.length?(i=e,x):i},x},e.models.pie=function(){function S(e){return e.each(function(e){function q(e){var t=(e.startAngle+e.endAngle)*90/Math.PI-90;return t>90?t-180:t}function R(e){e.endAngle=isNaN(e.endAngle)?0:e.endAngle,e.startAngle=isNaN(e.startAngle)?0:e.startAngle,m||(e.innerRadius=0);var t=d3.interpolate(this._current,e);return this._current=t(0),function(e){return A(t(e))}}function U(e){e.innerRadius=0;var t=d3.interpolate({startAngle:0,endAngle:0},e);return function(e){return A(t(e))}}var o=n-t.left-t.right,f=r-t.top-t.bottom,S=Math.min(o,f)/2,x=S-S/5,T=d3.select(this),N=T.selectAll(".nv-wrap.nv-pie").data(e),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-pie nv-chart-"+u),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-pie"),k.append("g").attr("class","nv-pieLabels"),N.attr("transform","translate("+t.left+","+t.top+")"),L.select(".nv-pie").attr("transform","translate("+o/2+","+f/2+")"),L.select(".nv-pieLabels").attr("transform","translate("+o/2+","+f/2+")"),T.on("click",function(e,t){E.chartClick({data:e,index:t,pos:d3.event,id:u})});var A=d3.svg.arc().outerRadius(x);y&&A.startAngle(y),b&&A.endAngle(b),m&&A.innerRadius(S*w);var O=d3.layout.pie().sort(null).value(function(e){return e.disabled?0:s(e)}),M=N.select(".nv-pie").selectAll(".nv-slice").data(O),_=N.select(".nv-pieLabels").selectAll(".nv-label").data(O);M.exit().remove(),_.exit().remove();var D=M.enter().append("g").attr("class","nv-slice").on("mouseover",function(e,t){d3.select(this).classed("hover",!0),E.elementMouseover({label:i(e.data),value:s(e.data),point:e.data,pointIndex:t,pos:[d3.event.pageX,d3.event.pageY],id:u})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),E.elementMouseout({label:i(e.data),value:s(e.data),point:e.data,index:t,id:u})}).on("click",function(e,t){E.elementClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()}).on("dblclick",function(e,t){E.elementDblClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()});M.attr("fill",function(e,t){return a(e,t)}).attr("stroke",function(e,t){return a(e,t)});var P=D.append("path").each(function(e){this._current=e});M.select("path").attr("d",A);if(l){var H=d3.svg.arc().innerRadius(0);c&&(H=A),h&&(H=d3.svg.arc().outerRadius(A.outerRadius())),_.enter().append("g").classed("nv-label",!0).each(function(e,t){var n=d3.select(this);n.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}return e.outerRadius=S+10,e.innerRadius=S+15,"translate("+H.centroid(e)+")"}),n.append("rect").style("stroke","#fff").style("fill","#fff").attr("rx",3).attr("ry",3),n.append("text").style("text-anchor",g?(e.startAngle+e.endAngle)/2<Math.PI?"start":"end":"middle").style("fill","#000")});var B={},j=14,F=140,I=function(e){return Math.floor(e[0]/F)*F+","+Math.floor(e[1]/j)*j};_.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}e.outerRadius=S+10,e.innerRadius=S+15;var n=H.centroid(e),r=I(n);return B[r]&&(n[1]-=j),B[I(n)]=!0,"translate("+n+")"}),_.select(".nv-label text").style("text-anchor",g?(d.startAngle+d.endAngle)/2<Math.PI?"start":"end":"middle").text(function(e,t){var n=(e.endAngle-e.startAngle)/(2*Math.PI),r={key:i(e.data),value:s(e.data),percent:d3.format("%")(n)};return e.value&&n>v?r[p]:""})}}),S}var t={top:0,right:0,bottom:0,left:0},n=500,r=500,i=function(e){return e.x},s=function(e){return e.y},o=function(e){return e.description},u=Math.floor(Math.random()*1e4),a=e.utils.defaultColor(),f=d3.format(",.2f"),l=!0,c=!0,h=!1,p="key",v=.02,m=!1,g=!1,y=!1,b=!1,w=.5,E=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return S.dispatch=E,S.options=e.utils.optionsFunc.bind(S),S.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,S):t},S.width=function(e){return arguments.length?(n=e,S):n},S.height=function(e){return arguments.length?(r=e,S):r},S.values=function(t){return e.log("pie.values() is no longer supported."),S},S.x=function(e){return arguments.length?(i=e,S):i},S.y=function(e){return arguments.length?(s=d3.functor(e),S):s},S.description=function(e){return arguments.length?(o=e,S):o},S.showLabels=function(e){return arguments.length?(l=e,S):l},S.labelSunbeamLayout=function(e){return arguments.length?(g=e,S):g},S.donutLabelsOutside=function(e){return arguments.length?(h=e,S):h},S.pieLabelsOutside=function(e){return arguments.length?(c=e,S):c},S.labelType=function(e){return arguments.length?(p=e,p=p||"key",S):p},S.donut=function(e){return arguments.length?(m=e,S):m},S.donutRatio=function(e){return arguments.length?(w=e,S):w},S.startAngle=function(e){return arguments.length?(y=e,S):y},S.endAngle=function(e){return arguments.length?(b=e,S):b},S.id=function(e){return arguments.length?(u=e,S):u},S.color=function(t){return arguments.length?(a=e.utils.getColor(t),S):a},S.valueFormat=function(e){return arguments.length?(f=e,S):f},S.labelThreshold=function(e){return arguments.length?(v=e,S):v},S},e.models.pieChart=function(){function v(e){return e.each(function(e){var u=d3.select(this),a=this,f=(i||parseInt(u.style("width"))||960)-r.left-r.right,d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom;v.update=function(){u.call(v)},v.container=this,l.disabled=e.map(function(e){return!!e.disabled});if(!c){var m;c={};for(m in l)l[m]instanceof Array?c[m]=l[m].slice(0):c[m]=l[m]}if(!e||!e.length){var g=u.selectAll(".nv-noData").data([h]);return g.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),g.attr("x",r.left+f/2).attr("y",r.top+d/2).text(function(e){return e}),v}u.selectAll(".nv-noData").remove();var y=u.selectAll("g.nv-wrap.nv-pieChart").data([e]),b=y.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),w=y.select("g");b.append("g").attr("class","nv-pieWrap"),b.append("g").attr("class","nv-legendWrap"),o&&(n.width(f).key(t.x()),y.select(".nv-legendWrap").datum(e).call(n),r.top!=n.height()&&(r.top=n.height(),d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom),y.select(".nv-legendWrap").attr("transform","translate(0,"+ -r.top+")")),y.attr("transform","translate("+r.left+","+r.top+")"),t.width(f).height(d);var E=w.select(".nv-pieWrap").datum([e]);d3.transition(E).call(t),n.dispatch.on("stateChange",function(e){l=e,p.stateChange(l),v.update()}),t.dispatch.on("elementMouseout.tooltip",function(e){p.tooltipHide(e)}),p.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),l.disabled=t.disabled),v.update()})}),v}var t=e.models.pie(),n=e.models.legend(),r={top:30,right:20,bottom:20,left:20},i=null,s=null,o=!0,u=e.utils.defaultColor(),a=!0,f=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+t+"</p>"},l={},c=null,h="No Data Available.",p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),d=function(n,r){var i=t.description()(n.point)||t.x()(n.point),s=n.pos[0]+(r&&r.offsetLeft||0),o=n.pos[1]+(r&&r.offsetTop||0),u=t.valueFormat()(t.y()(n.point)),a=f(i,u,n,v);e.tooltip.show([s,o],a,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+r.left,e.pos[1]+r.top],p.tooltipShow(e)}),p.on("tooltipShow",function(e){a&&d(e)}),p.on("tooltipHide",function(){a&&e.tooltip.cleanup()}),v.legend=n,v.dispatch=p,v.pie=t,d3.rebind(v,t,"valueFormat","values","x","y","description","id","showLabels","donutLabelsOutside","pieLabelsOutside","labelType","donut","donutRatio","labelThreshold"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(r.top=typeof e.top!="undefined"?e.top:r.top,r.right=typeof e.right!="undefined"?e.right:r.right,r.bottom=typeof e.bottom!="undefined"?e.bottom:r.bottom,r.left=typeof e.left!="undefined"?e.left:r.left,v):r},v.width=function(e){return arguments.length?(i=e,v):i},v.height=function(e){return arguments.length?(s=e,v):s},v.color=function(r){return arguments.length?(u=e.utils.getColor(r),n.color(u),t.color(u),v):u},v.showLegend=function(e){return arguments.length?(o=e,v):o},v.tooltips=function(e){return arguments.length?(a=e,v):a},v.tooltipContent=function(e){return arguments.length?(f=e,v):f},v.state=function(e){return arguments.length?(l=e,v):l},v.defaultState=function(e){return arguments.length?(c=e,v):c},v.noData=function(e){return arguments.length?(h=e,v):h},v},e.models.scatter=function(){function I(q){return q.each(function(I){function Q(){if(!g)return!1;var e,i=d3.merge(I.map(function(e,t){return e.values.map(function(e,n){var r=f(e,n),i=l(e,n);return[o(r)+Math.random()*1e-7,u(i)+Math.random()*1e-7,t,n,e]}).filter(function(e,t){return b(e[4],t)})}));if(D===!0){if(x){var a=X.select("defs").selectAll(".nv-point-clips").data([s]).enter();a.append("clipPath").attr("class","nv-point-clips").attr("id","nv-points-clip-"+s);var c=X.select("#nv-points-clip-"+s).selectAll("circle").data(i);c.enter().append("circle").attr("r",T),c.exit().remove(),c.attr("cx",function(e){return e[0]}).attr("cy",function(e){return e[1]}),X.select(".nv-point-paths").attr("clip-path","url(#nv-points-clip-"+s+")")}i.length&&(i.push([o.range()[0]-20,u.range()[0]-20,null,null]),i.push([o.range()[1]+20,u.range()[1]+20,null,null]),i.push([o.range()[0]-20,u.range()[0]+20,null,null]),i.push([o.range()[1]+20,u.range()[1]-20,null,null]));var h=d3.geom.polygon([[-10,-10],[-10,r+10],[n+10,r+10],[n+10,-10]]),p=d3.geom.voronoi(i).map(function(e,t){return{data:h.clip(e),series:i[t][2],point:i[t][3]}}),d=X.select(".nv-point-paths").selectAll("path").data(p);d.enter().append("path").attr("class",function(e,t){return"nv-path-"+t}),d.exit().remove(),d.attr("d",function(e){return e.data.length===0?"M 0 0":"M"+e.data.join("L")+"Z"});var v=function(e,n){if(F)return 0;var r=I[e.series];if(typeof r=="undefined")return;var i=r.values[e.point];n({point:i,series:r,pos:[o(f(i,e.point))+t.left,u(l(i,e.point))+t.top],seriesIndex:e.series,pointIndex:e.point})};d.on("click",function(e){v(e,_.elementClick)}).on("mouseover",function(e){v(e,_.elementMouseover)}).on("mouseout",function(e,t){v(e,_.elementMouseout)})}else X.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementClick({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseover",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementMouseover({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseout",function(e,t){if(F||!I[e.series])return 0;var n=I[e.series],r=n.values[t];_.elementMouseout({point:r,series:n,seriesIndex:e.series,pointIndex:t})});F=!1}var q=n-t.left-t.right,R=r-t.top-t.bottom,U=d3.select(this);I.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var W=N&&C&&A?[]:d3.merge(I.map(function(e){return e.values.map(function(e,t){return{x:f(e,t),y:l(e,t),size:c(e,t)}})}));o.domain(N||d3.extent(W.map(function(e){return e.x}).concat(d))),w&&I[0]?o.range(k||[(q*E+q)/(2*I[0].values.length),q-q*(1+E)/(2*I[0].values.length)]):o.range(k||[0,q]),u.domain(C||d3.extent(W.map(function(e){return e.y}).concat(v))).range(L||[R,0]),a.domain(A||d3.extent(W.map(function(e){return e.size}).concat(m))).range(O||[16,256]);if(o.domain()[0]===o.domain()[1]||u.domain()[0]===u.domain()[1])M=!0;o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]-o.domain()[0]*.01,o.domain()[1]+o.domain()[1]*.01]):o.domain([-1,1])),u.domain()[0]===u.domain()[1]&&(u.domain()[0]?u.domain([u.domain()[0]-u.domain()[0]*.01,u.domain()[1]+u.domain()[1]*.01]):u.domain([-1,1])),isNaN(o.domain()[0])&&o.domain([-1,1]),isNaN(u.domain()[0])&&u.domain([-1,1]),P=P||o,H=H||u,B=B||a;var X=U.selectAll("g.nv-wrap.nv-scatter").data([I]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+s+(M?" nv-single-point":"")),$=V.append("defs"),J=V.append("g"),K=X.select("g");J.append("g").attr("class","nv-groups"),J.append("g").attr("class","nv-point-paths"),X.attr("transform","translate("+t.left+","+t.top+")"),$.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),X.select("#nv-edge-clip-"+s+" rect").attr("width",q).attr("height",R>0?R:0),K.attr("clip-path",S?"url(#nv-edge-clip-"+s+")":""),F=!0;var G=X.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});G.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),G.exit().remove(),G.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),G.style("fill",function(e,t){return i(e,t)}).style("stroke",function(e,t){return i(e,t)}).style("stroke-opacity",1).style("fill-opacity",.5);if(p){var Y=G.selectAll("circle.nv-point").data(function(e){return e.values},y);Y.enter().append("circle").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("cx",function(t,n){return e.utils.NaNtoZero(P(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(H(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)}),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)})}else{var Y=G.selectAll("path.nv-point").data(function(e){return e.values});Y.enter().append("path").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("transform",function(e,t){return"translate("+P(f(e,t))+","+H(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))})),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))}))}clearTimeout(j),j=setTimeout(Q,300),P=o.copy(),H=u.copy(),B=a.copy()}),I}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=d3.scale.linear(),u=d3.scale.linear(),a=d3.scale.linear(),f=function(e){return e.x},l=function(e){return e.y},c=function(e){return e.size||1},h=function(e){return e.shape||"circle"},p=!0,d=[],v=[],m=[],g=!0,y=null,b=function(e){return!e.notActive},w=!1,E=.1,S=!1,x=!0,T=function(){return 25},N=null,C=null,k=null,L=null,A=null,O=null,M=!1,_=d3.dispatch("elementClick","elementMouseover","elementMouseout"),D=!0,P,H,B,j,F=!1;return I.clearHighlights=function(){d3.selectAll(".nv-chart-"+s+" .nv-point.hover").classed("hover",!1)},I.highlightPoint=function(e,t,n){d3.select(".nv-chart-"+s+" .nv-series-"+e+" .nv-point-"+t).classed("hover",n)},_.on("elementMouseover.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!0)}),_.on("elementMouseout.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!1)}),I.dispatch=_,I.options=e.utils.optionsFunc.bind(I),I.x=function(e){return arguments.length?(f=d3.functor(e),I):f},I.y=function(e){return arguments.length?(l=d3.functor(e),I):l},I.size=function(e){return arguments.length?(c=d3.functor(e),I):c},I.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,I):t},I.width=function(e){return arguments.length?(n=e,I):n},I.height=function(e){return arguments.length?(r=e,I):r},I.xScale=function(e){return arguments.length?(o=e,I):o},I.yScale=function(e){return arguments.length?(u=e,I):u},I.zScale=function(e){return arguments.length?(a=e,I):a},I.xDomain=function(e){return arguments.length?(N=e,I):N},I.yDomain=function(e){return arguments.length?(C=e,I):C},I.sizeDomain=function(e){return arguments.length?(A=e,I):A},I.xRange=function(e){return arguments.length?(k=e,I):k},I.yRange=function(e){return arguments.length?(L=e,I):L},I.sizeRange=function(e){return arguments.length?(O=e,I):O},I.forceX=function(e){return arguments.length?(d=e,I):d},I.forceY=function(e){return arguments.length?(v=e,I):v},I.forceSize=function(e){return arguments.length?(m=e,I):m},I.interactive=function(e){return arguments.length?(g=e,I):g},I.pointKey=function(e){return arguments.length?(y=e,I):y},I.pointActive=function(e){return arguments.length?(b=e,I):b},I.padData=function(e){return arguments.length?(w=e,I):w},I.padDataOuter=function(e){return arguments.length?(E=e,I):E},I.clipEdge=function(e){return arguments.length?(S=e,I):S},I.clipVoronoi=function(e){return arguments.length?(x=e,I):x},I.useVoronoi=function(e){return arguments.length?(D=e,D===!1&&(x=!1),I):D},I.clipRadius=function(e){return arguments.length?(T=e,I):T},I.color=function(t){return arguments.length?(i=e.utils.getColor(t),I):i},I.shape=function(e){return arguments.length?(h=e,I):h},I.onlyCircles=function(e){return arguments.length?(p=e,I):p},I.id=function(e){return arguments.length?(s=e,I):s},I.singlePoint=function(e){return arguments.length?(M=e,I):M},I},e.models.scatterChart=function(){function F(e){return e.each(function(e){function J(){if(T)return W.select(".nv-point-paths").style("pointer-events","all"),!1;W.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(x).focus(i[0]),p.distortion(x).focus(i[1]),W.select(".nv-scatterWrap").call(t),b&&W.select(".nv-x.nv-axis").call(n),w&&W.select(".nv-y.nv-axis").call(r),W.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),W.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var C=d3.select(this),k=this,L=(f||parseInt(C.style("width"))||960)-a.left-a.right,D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom;F.update=function(){C.call(F)},F.container=this,A.disabled=e.map(function(e){return!!e.disabled});if(!O){var I;O={};for(I in A)A[I]instanceof Array?O[I]=A[I].slice(0):O[I]=A[I]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=C.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",a.left+L/2).attr("y",a.top+D/2).text(function(e){return e}),F}C.selectAll(".nv-noData").remove(),P=P||h,H=H||p;var R=C.selectAll("g.nv-wrap.nv-scatterChart").data([e]),U=R.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),z=U.append("g"),W=R.select("g");z.append("rect").attr("class","nvd3 nv-background"),z.append("g").attr("class","nv-x nv-axis"),z.append("g").attr("class","nv-y nv-axis"),z.append("g").attr("class","nv-scatterWrap"),z.append("g").attr("class","nv-distWrap"),z.append("g").attr("class","nv-legendWrap"),z.append("g").attr("class","nv-controlsWrap");if(y){var X=S?L/2:L;i.width(X),R.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom),R.select(".nv-legendWrap").attr("transform","translate("+(L-X)+","+ -a.top+")")}S&&(s.width(180).color(["#444"]),W.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -a.top+")").call(s)),R.attr("transform","translate("+a.left+","+a.top+")"),E&&W.select(".nv-y.nv-axis").attr("transform","translate("+L+",0)"),t.width(L).height(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),d!==0&&t.xDomain(null),v!==0&&t.yDomain(null),R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t);if(d!==0){var V=h.domain()[1]-h.domain()[0];t.xDomain([h.domain()[0]-d*V,h.domain()[1]+d*V])}if(v!==0){var $=p.domain()[1]-p.domain()[0];t.yDomain([p.domain()[0]-v*$,p.domain()[1]+v*$])}(v!==0||d!==0)&&R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),b&&(n.scale(h).ticks(n.ticks()&&n.ticks().length?n.ticks():L/100).tickSize(-D,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),w&&(r.scale(p).ticks(r.ticks()&&r.ticks().length?r.ticks():D/36).tickSize(-L,0),W.select(".nv-y.nv-axis").call(r)),m&&(o.getData(t.x()).scale(h).width(L).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),W.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),g&&(u.getData(t.y()).scale(p).width(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),W.select(".nv-distributionY").attr("transform","translate("+(E?L:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(W.select(".nv-background").attr("width",L).attr("height",D),W.select(".nv-background").on("mousemove",J),W.select(".nv-background").on("click",function(){T=!T}),t.dispatch.on("elementClick.freezeFisheye",function(){T=!T})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,x=e.disabled?0:2.5,W.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),W.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(x).focus(0),p.distortion(x).focus(0),W.select(".nv-scatterWrap").call(t),W.select(".nv-x.nv-axis").call(n),W.select(".nv-y.nv-axis").call(r)):T=!1,F.update()}),i.dispatch.on("stateChange",function(e){A.disabled=e.disabled,M.stateChange(A),F.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",function(t,n){return e.pos[1]-D}),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],M.tooltipShow(e)}),M.on("tooltipShow",function(e){N&&B(e,k.parentNode)}),M.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),A.disabled=t.disabled),F.update()}),P=h.copy(),H=p.copy()}),F}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=0,v=0,m=!1,g=!1,y=!0,b=!0,w=!0,E=!1,S=!!d3.fisheye,x=0,T=!1,N=!0,C=function(e,t,n){return"<strong>"+t+"</strong>"},k=function(e,t,n){return"<strong>"+n+"</strong>"},L=null,A={},O=null,M=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),_="No Data Available.",D=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(E?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var P,H,B=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));C!=null&&e.tooltip.show([f,l],C(i.series.key,v,m,i,F),"n",1,s,"x-nvtooltip"),k!=null&&e.tooltip.show([c,d],k(i.series.key,v,m,i,F),"e",1,s,"y-nvtooltip"),L!=null&&e.tooltip.show([o,u],L(i.series.key,v,m,i,F),i.value<0?"n":"s",null,s)},j=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){M.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),M.on("tooltipHide",function(){N&&e.tooltip.cleanup()}),F.dispatch=M,F.scatter=t,F.legend=i,F.controls=s,F.xAxis=n,F.yAxis=r,F.distX=o,F.distY=u,d3.rebind(F,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),F.options=e.utils.optionsFunc.bind(F),F.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,F):a},F.width=function(e){return arguments.length?(f=e,F):f},F.height=function(e){return arguments.length?(l=e,F):l},F.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),F):c},F.showDistX=function(e){return arguments.length?(m=e,F):m},F.showDistY=function(e){return arguments.length?(g=e,F):g},F.showControls=function(e){return arguments.length?(S=e,F):S},F.showLegend=function(e){return arguments.length?(y=e,F):y},F.showXAxis=function(e){return arguments.length?(b=e,F):b},F.showYAxis=function(e){return arguments.length?(w=e,F):w},F.rightAlignYAxis=function(e){return arguments.length?(E=e,r.orient(e?"right":"left"),F):E},F.fisheye=function(e){return arguments.length?(x=e,F):x},F.xPadding=function(e){return arguments.length?(d=e,F):d},F.yPadding=function(e){return arguments.length?(v=e,F):v},F.tooltips=function(e){return arguments.length?(N=e,F):N},F.tooltipContent=function(e){return arguments.length?(L=e,F):L},F.tooltipXContent=function(e){return arguments.length?(C=e,F):C},F.tooltipYContent=function(e){return arguments.length?(k=e,F):k},F.state=function(e){return arguments.length?(A=e,F):A},F.defaultState=function(e){return arguments.length?(O=e,F):O},F.noData=function(e){return arguments.length?(_=e,F):_},F.transitionDuration=function(e){return arguments.length?(D=e,F):D},F},e.models.scatterPlusLineChart=function(){function B(e){return e.each(function(e){function V(){if(S)return U.select(".nv-point-paths").style("pointer-events","all"),!1;U.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(E).focus(i[0]),p.distortion(E).focus(i[1]),U.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),g&&U.select(".nv-x.nv-axis").call(n),y&&U.select(".nv-y.nv-axis").call(r),U.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),U.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var T=d3.select(this),N=this,C=(f||parseInt(T.style("width"))||960)-a.left-a.right,M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom;B.update=function(){T.call(B)},B.container=this,k.disabled=e.map(function(e){return!!e.disabled});if(!L){var j;L={};for(j in k)k[j]instanceof Array?L[j]=k[j].slice(0):L[j]=k[j]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var F=T.selectAll(".nv-noData").data([O]);return F.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),F.attr("x",a.left+C/2).attr("y",a.top+M/2).text(function(e){return e}),B}T.selectAll(".nv-noData").remove(),h=t.xScale(),p=t.yScale(),_=_||h,D=D||p;var I=T.selectAll("g.nv-wrap.nv-scatterChart").data([e]),q=I.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),R=q.append("g"),U=I.select("g");R.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-scatterWrap"),R.append("g").attr("class","nv-regressionLinesWrap"),R.append("g").attr("class","nv-distWrap"),R.append("g").attr("class","nv-legendWrap"),R.append("g").attr("class","nv-controlsWrap"),I.attr("transform","translate("+a.left+","+a.top+")"),b&&U.select(".nv-y.nv-axis").attr("transform","translate("+C+",0)"),m&&(i.width(C/2),I.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom),I.select(".nv-legendWrap").attr("transform","translate("+C/2+","+ -a.top+")")),w&&(s.width(180).color(["#444"]),U.select(".nv-controlsWrap").datum(H).attr("transform","translate(0,"+ -a.top+")").call(s)),t.width(C).height(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),I.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),I.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+t.id()+")");var z=I.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(e){return e});z.enter().append("g").attr("class","nv-regLines");var W=z.selectAll(".nv-regLine").data(function(e){return[e]}),X=W.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0);W.attr("x1",h.range()[0]).attr("x2",h.range()[1]).attr("y1",function(e,t){return p(h.domain()[0]*e.slope+e.intercept)}).attr("y2",function(e,t){return p(h.domain()[1]*e.slope+e.intercept)}).style("stroke",function(e,t,n){return c(e,n)}).style("stroke-opacity",function(e,t){return e.disabled||typeof e.slope=="undefined"||typeof e.intercept=="undefined"?0:1}),g&&(n.scale(h).ticks(n.ticks()?n.ticks():C/100).tickSize(-M,0),U.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),y&&(r.scale(p).ticks(r.ticks()?r.ticks():M/36).tickSize(-C,0),U.select(".nv-y.nv-axis").call(r)),d&&(o.getData(t.x()).scale(h).width(C).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),U.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),v&&(u.getData(t.y()).scale(p).width(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),U.select(".nv-distributionY").attr("transform","translate("+(b?C:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(U.select(".nv-background").attr("width",C).attr("height",M),U.select(".nv-background").on("mousemove",V),U.select(".nv-background").on("click",function(){S=!S}),t.dispatch.on("elementClick.freezeFisheye",function(){S=!S})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,E=e.disabled?0:2.5,U.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),U.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(E).focus(0),p.distortion(E).focus(0),U.select(".nv-scatterWrap").call(t),U.select(".nv-x.nv-axis").call(n),U.select(".nv-y.nv-axis").call(r)):S=!1,B.update()}),i.dispatch.on("stateChange",function(e){k=e,A.stateChange(k),B.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",e.pos[1]-M),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],A.tooltipShow(e)}),A.on("tooltipShow",function(e){x&&P(e,N.parentNode)}),A.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),k.disabled=t.disabled),B.update()}),_=h.copy(),D=p.copy()}),B}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=!1,v=!1,m=!0,g=!0,y=!0,b=!1,w=!!d3.fisheye,E=0,S=!1,x=!0,T=function(e,t,n){return"<strong>"+t+"</strong>"},N=function(e,t,n){return"<strong>"+n+"</strong>"},C=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+r+"</p>"},k={},L=null,A=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),O="No Data Available.",M=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(b?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var _,D,P=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));T!=null&&e.tooltip.show([f,l],T(i.series.key,v,m,i,B),"n",1,s,"x-nvtooltip"),N!=null&&e.tooltip.show([c,d],N(i.series.key,v,m,i,B),"e",1,s,"y-nvtooltip"),C!=null&&e.tooltip.show([o,u],C(i.series.key,v,m,i.point.tooltip,i,B),i.value<0?"n":"s",null,s)},H=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){A.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),A.on("tooltipHide",function(){x&&e.tooltip.cleanup()}),B.dispatch=A,B.scatter=t,B.legend=i,B.controls=s,B.xAxis=n,B.yAxis=r,B.distX=o,B.distY=u,d3.rebind(B,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),B.options=e.utils.optionsFunc.bind(B),B.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,B):a},B.width=function(e){return arguments.length?(f=e,B):f},B.height=function(e){return arguments.length?(l=e,B):l},B.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),B):c},B.showDistX=function(e){return arguments.length?(d=e,B):d},B.showDistY=function(e){return arguments.length?(v=e,B):v},B.showControls=function(e){return arguments.length?(w=e,B):w},B.showLegend=function(e){return arguments.length?(m=e,B):m},B.showXAxis=function(e){return arguments.length?(g=e,B):g},B.showYAxis=function(e){return arguments.length?(y=e,B):y},B.rightAlignYAxis=function(e){return arguments.length?(b=e,r.orient(e?"right":"left"),B):b},B.fisheye=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(x=e,B):x},B.tooltipContent=function(e){return arguments.length?(C=e,B):C},B.tooltipXContent=function(e){return arguments.length?(T=e,B):T},B.tooltipYContent=function(e){return arguments.length?(N=e,B):N},B.state=function(e){return arguments.length?(k=e,B):k},B.defaultState=function(e){return arguments.length?(L=e,B):L},B.noData=function(e){return arguments.length?(O=e,B):O},B.transitionDuration=function(e){return arguments.length?(M=e,B):M},B},e.models.sparkline=function(){function d(e){return e.each(function(e){var i=n-t.left-t.right,d=r-t.top-t.bottom,v=d3.select(this);s.domain(l||d3.extent(e,u)).range(h||[0,i]),o.domain(c||d3.extent(e,a)).range(p||[d,0]);var m=v.selectAll("g.nv-wrap.nv-sparkline").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline"),b=g.append("g"),w=m.select("g");m.attr("transform","translate("+t.left+","+t.top+")");var E=m.selectAll("path").data(function(e){return[e]});E.enter().append("path"),E.exit().remove(),E.style("stroke",function(e,t){return e.color||f(e,t)}).attr("d",d3.svg.line().x(function(e,t){return s(u(e,t))}).y(function(e,t){return o(a(e,t))}));var S=m.selectAll("circle.nv-point").data(function(e){function n(t){if(t!=-1){var n=e[t];return n.pointIndex=t,n}return null}var t=e.map(function(e,t){return a(e,t)}),r=n(t.lastIndexOf(o.domain()[1])),i=n(t.indexOf(o.domain()[0])),s=n(t.length-1);return[i,r,s].filter(function(e){return e!=null})});S.enter().append("circle"),S.exit().remove(),S.attr("cx",function(e,t){return s(u(e,e.pointIndex))}).attr("cy",function(e,t){return o(a(e,e.pointIndex))}).attr("r",2).attr("class",function(e,t){return u(e,e.pointIndex)==s.domain()[1]?"nv-point nv-currentValue":a(e,e.pointIndex)==o.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),d}var t={top:2,right:0,bottom:2,left:0},n=400,r=32,i=!0,s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=e.utils.getColor(["#000"]),l,c,h,p;return d.options=e.utils.optionsFunc.bind(d),d.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,d):t},d.width=function(e){return arguments.length?(n=e,d):n},d.height=function(e){return arguments.length?(r=e,d):r},d.x=function(e){return arguments.length?(u=d3.functor(e),d):u},d.y=function(e){return arguments.length?(a=d3.functor(e),d):a},d.xScale=function(e){return arguments.length?(s=e,d):s},d.yScale=function(e){return arguments.length?(o=e,d):o},d.xDomain=function(e){return arguments.length?(l=e,d):l},d.yDomain=function(e){return arguments.length?(c=e,d):c},d.xRange=function(e){return arguments.length?(h=e,d):h},d.yRange=function(e){return arguments.length?(p=e,d):p},d.animate=function(e){return arguments.length?(i=e,d):i},d.color=function(t){return arguments.length?(f=e.utils.getColor(t),d):f},d},e.models.sparklinePlus=function(){function v(e){return e.each(function(c){function O(){if(a)return;var e=C.selectAll(".nv-hoverValue").data(u),r=e.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);e.exit().style("stroke-opacity",0).style("fill-opacity",0).remove(),e.attr("transform",function(e){return"translate("+s(t.x()(c[e],e))+",0)"}).style("stroke-opacity",1).style("fill-opacity",1);if(!u.length)return;r.append("line").attr("x1",0).attr("y1",-n.top).attr("x2",0).attr("y2",b),r.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-n.top).attr("text-anchor","end").attr("dy",".9em"),C.select(".nv-hoverValue .nv-xValue").text(f(t.x()(c[u[0]],u[0]))),r.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-n.top).attr("text-anchor","start").attr("dy",".9em"),C.select(".nv-hoverValue .nv-yValue").text(l(t.y()(c[u[0]],u[0])))}function M(){function r(e,n){var r=Math.abs(t.x()(e[0],0)-n),i=0;for(var s=0;s<e.length;s++)Math.abs(t.x()(e[s],s)-n)<r&&(r=Math.abs(t.x()(e[s],s)-n),i=s);return i}if(a)return;var e=d3.mouse(this)[0]-n.left;u=[r(c,Math.round(s.invert(e)))],O()}var m=d3.select(this),g=(r||parseInt(m.style("width"))||960)-n.left-n.right,b=(i||parseInt(m.style("height"))||400)-n.top-n.bottom;v.update=function(){v(e)},v.container=this;if(!c||!c.length){var w=m.selectAll(".nv-noData").data([d]);return w.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),w.attr("x",n.left+g/2).attr("y",n.top+b/2).text(function(e){return e}),v}m.selectAll(".nv-noData").remove();var E=t.y()(c[c.length-1],c.length-1);s=t.xScale(),o=t.yScale();var S=m.selectAll("g.nv-wrap.nv-sparklineplus").data([c]),T=S.enter().append("g").attr("class","nvd3 nv-wrap nv-sparklineplus"),N=T.append("g"),C=S.select("g");N.append("g").attr("class","nv-sparklineWrap"),N.append("g").attr("class","nv-valueWrap"),N.append("g").attr("class","nv-hoverArea"),S.attr("transform","translate("+n.left+","+n.top+")");var k=C.select(".nv-sparklineWrap");t.width(g).height(b),k.call(t);var L=C.select(".nv-valueWrap"),A=L.selectAll(".nv-currentValue").data([E]);A.enter().append("text").attr("class","nv-currentValue").attr("dx",p?-8:8).attr("dy",".9em").style("text-anchor",p?"end":"start"),A.attr("x",g+(p?n.right:0)).attr("y",h?function(e){return o(e)}:0).style("fill",t.color()(c[c.length-1],c.length-1)).text(l(E)),N.select(".nv-hoverArea").append("rect").on("mousemove",M).on("click",function(){a=!a}).on("mouseout",function(){u=[],O()}),C.select(".nv-hoverArea rect").attr("transform",function(e){return"translate("+ -n.left+","+ -n.top+")"}).attr("width",g+n.left+n.right).attr("height",b+n.top)}),v}var t=e.models.sparkline(),n={top:15,right:100,bottom:10,left:50},r=null,i=null,s,o,u=[],a=!1,f=d3.format(",r"),l=d3.format(",.2f"),c=!0,h=!0,p=!1,d="No Data Available.";return v.sparkline=t,d3.rebind(v,t,"x","y","xScale","yScale","color"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,v):n},v.width=function(e){return arguments.length?(r=e,v):r},v.height=function(e){return arguments.length?(i=e,v):i},v.xTickFormat=function(e){return arguments.length?(f=e,v):f},v.yTickFormat=function(e){return arguments.length?(l=e,v):l},v.showValue=function(e){return arguments.length?(c=e,v):c},v.alignValue=function(e){return arguments.length?(h=e,v):h},v.rightAlignValue=function(e){return arguments.length?(p=e,v):p},v.noData=function(e){return arguments.length?(d=e,v):d},v},e.models.stackedArea=function(){function g(e){return e.each(function(e){var a=n-t.left-t.right,b=r-t.top-t.bottom,w=d3.select(this);p=v.xScale(),d=v.yScale();var E=e;e.forEach(function(e,t){e.seriesIndex=t,e.values=e.values.map(function(e,n){return e.index=n,e.seriesIndex=t,e})});var S=e.filter(function(e){return!e.disabled});e=d3.layout.stack().order(l).offset(f).values(function(e){return e.values}).x(o).y(u).out(function(e,t,n){var r=u(e)===0?0:n;e.display={y:r,y0:t}})(S);var T=w.selectAll("g.nv-wrap.nv-stackedarea").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedarea"),C=N.append("defs"),k=N.append("g"),L=T.select("g");k.append("g").attr("class","nv-areaWrap"),k.append("g").attr("class","nv-scatterWrap"),T.attr("transform","translate("+t.left+","+t.top+")"),v.width(a).height(b).x(o).y(function(e){return e.display.y+e.display.y0}).forceY([0]).color(e.map(function(e,t){return e.color||i(e,e.seriesIndex)}));var A=L.select(".nv-scatterWrap").datum(e);A.call(v),C.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),T.select("#nv-edge-clip-"+s+" rect").attr("width",a).attr("height",b),L.attr("clip-path",h?"url(#nv-edge-clip-"+s+")":"");var O=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y+e.display.y0)}).interpolate(c),M=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y0)}),_=L.select(".nv-areaWrap").selectAll("path.nv-area").data(function(e){return e});_.enter().append("path").attr("class",function(e,t){return"nv-area nv-area-"+t}).attr("d",function(e,t){return M(e.values,e.seriesIndex)}).on("mouseover",function(e,t){d3.select(this).classed("hover",!0),m.areaMouseover({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),m.areaMouseout({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("click",function(e,t){d3.select(this).classed("hover",!1),m.areaClick({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}),_.exit().remove(),_.style("fill",function(e,t){return e.color||i(e,e.seriesIndex)}).style("stroke",function(e,t){return e.color||i(e,e.seriesIndex)}),_.attr("d",function(e,t){return O(e.values,t)}),v.dispatch.on("elementMouseover.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!0)}),v.dispatch.on("elementMouseout.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!1)}),g.d3_stackedOffset_stackPercent=function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,a=[];for(s=0;s<n;++s){for(i=0,o=0;i<E.length;i++)o+=u(E[i].values[s]);if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)a[s]=0;return a}}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=function(e){return e.x},u=function(e){return e.y},a="stack",f="zero",l="default",c="linear",h=!1,p,d,v=e.models.scatter(),m=d3.dispatch("tooltipShow","tooltipHide","areaClick","areaMouseover","areaMouseout");return v.size(2.2).sizeDomain([2.2,2.2]),v.dispatch.on("elementClick.area",function(e){m.areaClick(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],m.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){m.tooltipHide(e)}),g.dispatch=m,g.scatter=v,d3.rebind(g,v,"interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","highlightPoint","clearHighlights"),g.options=e.utils.optionsFunc.bind(g),g.x=function(e){return arguments.length?(o=d3.functor(e),g):o},g.y=function(e){return arguments.length?(u=d3.functor(e),g):u},g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.clipEdge=function(e){return arguments.length?(h=e,g):h},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),g):i},g.offset=function(e){return arguments.length?(f=e,g):f},g.order=function(e){return arguments.length?(l=e,g):l},g.style=function(e){if(!arguments.length)return a;a=e;switch(a){case"stack":g.offset("zero"),g.order("default");break;case"stream":g.offset("wiggle"),g.order("inside-out");break;case"stream-center":g.offset("silhouette"),g.order("inside-out");break;case"expand":g.offset("expand"),g.order("default");break;case"stack_percent":g.offset(g.d3_stackedOffset_stackPercent),g.order("default")}return g},g.interpolate=function(e){return arguments.length?(c=e,g):c},g},e.models.stackedAreaChart=function(){function M(y){return y.each(function(y){var A=d3.select(this),_=this,D=(a||parseInt(A.style("width"))||960)-u.left-u.right,P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom;M.update=function(){A.call(M)},M.container=this,S.disabled=y.map(function(e){return!!e.disabled});if(!x){var H;x={};for(H in S)S[H]instanceof Array?x[H]=S[H].slice(0):x[H]=S[H]}if(!y||!y.length||!y.filter(function(e){return e.values.length}).length){var B=A.selectAll(".nv-noData").data([T]);return B.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),B.attr("x",u.left+D/2).attr("y",u.top+P/2).text(function(e){return e}),M}A.selectAll(".nv-noData").remove(),b=t.xScale(),w=t.yScale();var j=A.selectAll("g.nv-wrap.nv-stackedAreaChart").data([y]),F=j.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),I=j.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-stackedWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-controlsWrap"),F.append("g").attr("class","nv-interactive"),I.select("rect").attr("width",D).attr("height",P);if(h){var q=c?D-C:D;i.width(q),I.select(".nv-legendWrap").datum(y).call(i),u.top!=i.height()&&(u.top=i.height(),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-legendWrap").attr("transform","translate("+(D-q)+","+ -u.top+")")}if(c){var R=[{key:L.stacked||"Stacked",metaKey:"Stacked",disabled:t.style()!="stack",style:"stack"},{key:L.stream||"Stream",metaKey:"Stream",disabled:t.style()!="stream",style:"stream"},{key:L.expanded||"Expanded",metaKey:"Expanded",disabled:t.style()!="expand",style:"expand"},{key:L.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:t.style()!="stack_percent",style:"stack_percent"}];C=k.length/3*260,R=R.filter(function(e){return k.indexOf(e.metaKey)!==-1}),s.width(C).color(["#444","#444","#444"]),I.select(".nv-controlsWrap").datum(R).call(s),u.top!=Math.max(s.height(),i.height())&&(u.top=Math.max(s.height(),i.height()),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-controlsWrap").attr("transform","translate(0,"+ -u.top+")")}j.attr("transform","translate("+u.left+","+u.top+")"),v&&I.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),m&&(o.width(D).height(P).margin({left:u.left,top:u.top}).svgContainer(A).xScale(b),j.select(".nv-interactive").call(o)),t.width(D).height(P);var U=I.select(".nv-stackedWrap").datum(y);U.call(t),p&&(n.scale(b).ticks(D/100).tickSize(-P,0),I.select(".nv-x.nv-axis").attr("transform","translate(0,"+P+")"),I.select(".nv-x.nv-axis").call(n)),d&&(r.scale(w).ticks(t.offset()=="wiggle"?0:P/36).tickSize(-D,0).setTickFormat(t.style()=="expand"||t.style()=="stack_percent"?d3.format("%"):E),I.select(".nv-y.nv-axis").call(r)),t.dispatch.on("areaClick.toggle",function(e){y.filter(function(e){return!e.disabled}).length===1?y.forEach(function(e){e.disabled=!1}):y.forEach(function(t,n){t.disabled=n!=e.seriesIndex}),S.disabled=y.map(function(e){return!!e.disabled}),N.stateChange(S),M.update()}),i.dispatch.on("stateChange",function(e){S.disabled=e.disabled,N.stateChange(S),M.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;R=R.map(function(e){return e.disabled=!0,e}),e.disabled=!1,t.style(e.style),S.style=t.style(),N.stateChange(S),M.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,a,f,c=[];y.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){a=e.interactiveBisect(n.values,i.pointXValue,M.x()),t.highlightPoint(r,a,!0);var o=n.values[a];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof f=="undefined"&&(f=M.xScale()(M.x()(o,a)));var u=t.style()=="expand"?o.display.y:M.y()(o,a);c.push({key:n.key,value:u,color:l(n,n.seriesIndex),stackedValue:o.display})}),c.reverse();if(c.length>2){var h=M.yScale().invert(i.mouseY),p=Infinity,d=null;c.forEach(function(e,t){h=Math.abs(h);var n=Math.abs(e.stackedValue.y0),r=Math.abs(e.stackedValue.y);if(h>=n&&h<=r+n){d=t;return}}),d!=null&&(c[d].highlight=!0)}var v=n.tickFormat()(M.x()(s,a)),m=t.style()=="expand"?function(e,t){return d3.format(".1%")(e)}:function(e,t){return r.tickFormat()(e)};o.tooltip.position({left:f+u.left,top:i.mouseY+u.top}).chartContainer(_.parentNode).enabled(g).valueFormatter(m).data({value:v,series:c})(),o.renderGuideLine(f)}),o.dispatch.on("elementMouseout",function(e){N.tooltipHide(),t.clearHighlights()}),N.on("tooltipShow",function(e){g&&O(e,_.parentNode)}),N.on("changeState",function(e){typeof e.disabled!="undefined"&&y.length===e.disabled.length&&(y.forEach(function(t,n){t.disabled=e.disabled[n]}),S.disabled=e.disabled),typeof e.style!="undefined"&&t.style(e.style),M.update()})}),M}var t=e.models.stackedArea(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:25,bottom:50,left:60},a=null,f=null,l=e.utils.defaultColor(),c=!0,h=!0,p=!0,d=!0,v=!1,m=!1,g=!0,y=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},b,w,E=d3.format(",.2f"),S={style:t.style()},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=250,k=["Stacked","Stream","Expanded"],L={},A=0;n.orient("bottom").tickPadding(7),r.orient(v?"right":"left"),s.updateState(!1);var O=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=y(i.series.key,a,f,i,M);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("tooltipShow",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],N.tooltipShow(e)}),t.dispatch.on("tooltipHide",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){g&&e.tooltip.cleanup()}),M.dispatch=N,M.stacked=t,M.legend=i,M.controls=s,M.xAxis=n,M.yAxis=r,M.interactiveLayer=o,d3.rebind(M,t,"x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","sizeDomain","interactive","useVoronoi","offset","order","style","clipEdge","forceX","forceY","forceSize","interpolate"),M.options=e.utils.optionsFunc.bind(M),M.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,M):u},M.width=function(e){return arguments.length?(a=e,M):a},M.height=function(e){return arguments.length?(f=e,M):f},M.color=function(n){return arguments.length?(l=e.utils.getColor(n),i.color(l),t.color(l),M):l},M.showControls=function(e){return arguments.length?(c=e,M):c},M.showLegend=function(e){return arguments.length?(h=e,M):h},M.showXAxis=function(e){return arguments.length?(p=e,M):p},M.showYAxis=function(e){return arguments.length?(d=e,M):d},M.rightAlignYAxis=function(e){return arguments.length?(v=e,r.orient(e?"right":"left"),M):v},M.useInteractiveGuideline=function(e){return arguments.length?(m=e,e===!0&&(M.interactive(!1),M.useVoronoi(!1)),M):m},M.tooltip=function(e){return arguments.length?(y=e,M):y},M.tooltips=function(e){return arguments.length?(g=e,M):g},M.tooltipContent=function(e){return arguments.length?(y=e,M):y},M.state=function(e){return arguments.length?(S=e,M):S},M.defaultState=function(e){return arguments.length?(x=e,M):x},M.noData=function(e){return arguments.length?(T=e,M):T},M.transitionDuration=function(e){return arguments.length?(A=e,M):A},M.controlsData=function(e){return arguments.length?(k=e,M):k},M.controlLabels=function(e){return arguments.length?typeof e!="object"?L:(L=e,M):L},r.setTickFormat=r.tickFormat,r.tickFormat=function(e){return arguments.length?(E=e,r):E},M}}(),define("plugin/plugins/nvd3/nv.d3",function(){}),define("plugin/charts/nvd3/common/config",["plugin/plugins/nvd3/nv.d3"],function(){return{title:"",category:"",library:"NVD3",tag:"svg",keywords:"small",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},use_panels:{title:"Use multi-panels",info:"Would you like to separate your data into individual panels?",type:"radiobutton",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/nvd3/bar/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked",category:"Bar diagrams",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_horizontal/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Horizontal",category:"Bar diagrams",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}},settings:{x_axis_type:{init:"hide"}}})}),define("plugin/charts/nvd3/bar_horizontal_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked horizontal",category:"Bar diagrams",keywords:"default small",settings:{x_axis_type:{init:"hide"}},columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/line_focus/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line with focus",category:"Others",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/pie/config",["plugin/plugins/nvd3/nv.d3"],function(){return $.extend(!0,{},{title:"Pie chart",category:"Area charts",library:"NVD3",tag:"svg",keywords:"default small",use_panels:!0,columns:{label:{title:"Labels",is_label:!0,is_auto:!0},y:{title:"Values",is_numeric:!0}},settings:{show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},donut_ratio:{title:"Donut ratio",info:"Determine how large the donut hole will be.",type:"select",init:"0.5",data:[{label:"50%",value:"0.5"},{label:"25%",value:"0.25"},{label:"10%",value:"0.10"},{label:"0%",value:"0"}]},label_separator:{type:"separator",title:"Label settings"},label_type:{title:"Donut label",info:"What would you like to show for each slice?",type:"select",init:"percent",data:[{label:"-- Nothing --",value:"hide",hide:"label_outside"},{label:"Label column",value:"key",show:"label_outside"},{label:"Value column",value:"value",show:"label_outside"},{label:"Percentage",value:"percent",show:"label_outside"}]},label_outside:{title:"Show outside",info:"Would you like to show labels outside the donut?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}})}),define("plugin/charts/nvd3/stackedarea_full/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Expanded",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea_stream/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stream",category:"Area charts",zoomable:"axis",keywords:"default small",showmaxmin:!0,columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/histogram/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogram",keywords:"default large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{x_axis_label:{init:"Values"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/histogram_discrete/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Discrete Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogramdiscrete",keywords:"default large",columns:{x:{title:"Observations",is_label:!0}},settings:{x_axis_label:{init:"Breaks"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/line/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/scatter/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/common/config",[],function(){return{title:"",category:"",library:"JqPlot",tag:"div",keywords:"default medium",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/jqplot/bar/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/line/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/scatter/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/boxplot/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Box plot",category:"Data processing (requires 'charts' tool from Toolshed)",library:"jqPlot",tag:"div",execute:"boxplot",keywords:"default large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},y_axis_grid:{title:"Axis grid",info:"Would you like to show grid lines for this axis?",type:"radiobutton",init:"1",data:[{label:"On",value:"1"},{label:"Off",value:"0"}]}}})}),define("plugin/charts/types",["plugin/charts/nvd3/bar/config","plugin/charts/nvd3/bar_stacked/config","plugin/charts/nvd3/bar_horizontal/config","plugin/charts/nvd3/bar_horizontal_stacked/config","plugin/charts/nvd3/line_focus/config","plugin/charts/nvd3/pie/config","plugin/charts/nvd3/stackedarea_full/config","plugin/charts/nvd3/stackedarea_stream/config","plugin/charts/nvd3/histogram/config","plugin/charts/nvd3/histogram_discrete/config","plugin/charts/nvd3/line/config","plugin/charts/nvd3/scatter/config","plugin/charts/nvd3/stackedarea/config","plugin/charts/jqplot/bar/config","plugin/charts/jqplot/line/config","plugin/charts/jqplot/scatter/config","plugin/charts/jqplot/boxplot/config"],function(e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m){return Backbone.Model.extend({defaults:{jqplot_bar:p,nvd3_bar:e,nvd3_bar_stacked:t,nvd3_bar_horizontal:n,nvd3_bar_horizontal_stacked:r,nvd3_line_focus:i,nvd3_stackedarea:h,nvd3_stackedarea_full:o,nvd3_stackedarea_stream:u,nvd3_pie:s,nvd3_line:l,nvd3_scatter:c,nvd3_histogram:a,nvd3_histogram_discrete:f,jqplot_line:d,jqplot_scatter:v}})}),define("plugin/app",["mvc/ui/ui-modal","mvc/ui/ui-portlet","plugin/library/ui","utils/utils","plugin/library/jobs","plugin/library/datasets","plugin/library/storage","plugin/views/viewer","plugin/views/editor","plugin/models/config","plugin/models/chart","plugin/charts/types"],function(e,t,n,r,i,s,o,u,a,f,l,c){return Backbone.View.extend({initialize:function(t){this.options=t,Galaxy&&Galaxy.modal?this.modal=Galaxy.modal:this.modal=new e.View,this.config=new f,this.types=new c,this.chart=new l,this.jobs=new i(this),this.datasets=new s(this),this.storage=new o(this),this.viewer_view=new u(this),this.editor_view=new a(this),this.$el.append(this.viewer_view.$el),this.$el.append(this.editor_view.$el);if(!this.storage.load())this.go("editor");else{this.go("viewer");var n=this;this.chart.deferred.execute(function(){n.chart.trigger("redraw")})}},go:function(e){$(".tooltip").hide();switch(e){case"editor":this.editor_view.show(),this.viewer_view.hide();break;case"viewer":this.editor_view.hide(),this.viewer_view.show()}},chartPath:function(e){var t=e.split(/_(.+)/);return t.length>=2?t[0]+"/"+t[1]:(console.debug("FAILED App:chartPath() - Invalid format: "+e),undefined)},execute:function(e){},onunload:function(){},log:function(e,t){console.log(e+" "+t)}})});
\ No newline at end of file
+define("mvc/ui/ui-modal",[],function(){var e=Backbone.View.extend({elMain:"body",optionsDefault:{title:"ui-modal",body:"",backdrop:!0,height:null,width:null,closing_events:!1,closing_callback:null},buttonList:{},initialize:function(e){e&&this._create(e)},show:function(e){this.initialize(e),this.options.height?(this.$body.css("height",this.options.height),this.$body.css("overflow","hidden")):this.$body.css("max-height",$(window).height()/2),this.options.width&&this.$dialog.css("width",this.options.width),this.visible?this.$el.show():this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.visible=!1,this.$el.fadeOut("fast"),this.options.closing_callback&&this.options.closing_callback()},enableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!0)},showButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).show()},hideButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).hide()},getButton:function(e){var t=this.buttonList[e];return this.$buttons.find("#"+t)},scrollTop:function(){return this.$body.scrollTop()},_create:function(e){var t=this;this.options=_.defaults(e,this.optionsDefault),this.options.body=="progress"&&(this.options.body=$('<div class="progress progress-striped active"><div class="progress-bar progress-bar-info" style="width:100%"></div></div>')),this.$el&&(this.$el.remove(),$(document).off("keyup.ui-modal")),this.setElement(this._template(this.options.title)),this.$dialog=this.$el.find(".modal-dialog"),this.$body=this.$el.find(".modal-body"),this.$footer=this.$el.find(".modal-footer"),this.$buttons=this.$el.find(".buttons"),this.$backdrop=this.$el.find(".modal-backdrop"),this.$body.html(this.options.body),this.options.backdrop||this.$backdrop.removeClass("in");if(this.options.buttons){this.buttonList={};var n=0;$.each(this.options.buttons,function(e,r){var i="button-"+n++;t.$buttons.append($('<button id="'+i+'"></button>').text(e).click(r)).append(" "),t.buttonList[e]=i})}else this.$footer.hide();$(this.elMain).append($(this.el)),this.options.closing_events&&($(document).on("keyup.ui-modal",function(e){e.keyCode==27&&t.hide()}),this.$el.find(".modal-backdrop").on("click",function(){t.hide()}))},_template:function(e){return'<div class="ui-modal modal"><div class="modal-backdrop fade in" style="z-index: -1;"></div><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" style="display: none;">×</button><h4 class="title">'+e+"</h4>"+"</div>"+'<div class="modal-body" style="position: static;"></div>'+'<div class="modal-footer">'+'<div class="buttons" style="float: right;"></div>'+"</div>"+"</div"+"</div>"+"</div>"}});return{View:e}}),function(){var e=this,t=e._,n={},r=Array.prototype,i=Object.prototype,s=Function.prototype,o=r.push,u=r.slice,a=r.concat,f=i.toString,l=i.hasOwnProperty,c=r.forEach,h=r.map,p=r.reduce,d=r.reduceRight,v=r.filter,m=r.every,g=r.some,y=r.indexOf,b=r.lastIndexOf,w=Array.isArray,E=Object.keys,S=s.bind,x=function(e){if(e instanceof x)return e;if(!(this instanceof x))return new x(e);this._wrapped=e};typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(exports=module.exports=x),exports._=x):e._=x,x.VERSION="1.4.4";var T=x.each=x.forEach=function(e,t,r){if(e==null)return;if(c&&e.forEach===c)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,s=e.length;i<s;i++)if(t.call(r,e[i],i,e)===n)return}else for(var o in e)if(x.has(e,o)&&t.call(r,e[o],o,e)===n)return};x.map=x.collect=function(e,t,n){var r=[];return e==null?r:h&&e.map===h?e.map(t,n):(T(e,function(e,i,s){r.push(t.call(n,e,i,s))}),r)};var N="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(p&&e.reduce===p)return r&&(t=x.bind(t,r)),i?e.reduce(t,n):e.reduce(t);T(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(N);return n},x.reduceRight=x.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(d&&e.reduceRight===d)return r&&(t=x.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=x.keys(e);s=o.length}T(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(N);return n},x.find=x.detect=function(e,t,n){var r;return C(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},x.filter=x.select=function(e,t,n){var r=[];return e==null?r:v&&e.filter===v?e.filter(t,n):(T(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},x.reject=function(e,t,n){return x.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},x.every=x.all=function(e,t,r){t||(t=x.identity);var i=!0;return e==null?i:m&&e.every===m?e.every(t,r):(T(e,function(e,s,o){if(!(i=i&&t.call(r,e,s,o)))return n}),!!i)};var C=x.some=x.any=function(e,t,r){t||(t=x.identity);var i=!1;return e==null?i:g&&e.some===g?e.some(t,r):(T(e,function(e,s,o){if(i||(i=t.call(r,e,s,o)))return n}),!!i)};x.contains=x.include=function(e,t){return e==null?!1:y&&e.indexOf===y?e.indexOf(t)!=-1:C(e,function(e){return e===t})},x.invoke=function(e,t){var n=u.call(arguments,2),r=x.isFunction(t);return x.map(e,function(e){return(r?t:e[t]).apply(e,n)})},x.pluck=function(e,t){return x.map(e,function(e){return e[t]})},x.where=function(e,t,n){return x.isEmpty(t)?n?void 0:[]:x[n?"find":"filter"](e,function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0})},x.findWhere=function(e,t){return x.where(e,t,!0)},x.max=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&x.isEmpty(e))return-Infinity;var r={computed:-Infinity,value:-Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o>=r.computed&&(r={value:e,computed:o})}),r.value},x.min=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&x.isEmpty(e))return Infinity;var r={computed:Infinity,value:Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o<r.computed&&(r={value:e,computed:o})}),r.value},x.shuffle=function(e){var t,n=0,r=[];return T(e,function(e){t=x.random(n++),r[n-1]=r[t],r[t]=e}),r};var k=function(e){return x.isFunction(e)?e:function(t){return t[e]}};x.sortBy=function(e,t,n){var r=k(t);return x.pluck(x.map(e,function(e,t,i){return{value:e,index:t,criteria:r.call(n,e,t,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index<t.index?-1:1}),"value")};var L=function(e,t,n,r){var i={},s=k(t==null?x.identity:t);return T(e,function(t,o){var u=s.call(n,t,o,e);r(i,u,t)}),i};x.groupBy=function(e,t,n){return L(e,t,n,function(e,t,n){(x.has(e,t)?e[t]:e[t]=[]).push(n)})},x.countBy=function(e,t,n){return L(e,t,n,function(e,t){x.has(e,t)||(e[t]=0),e[t]++})},x.sortedIndex=function(e,t,n,r){n=n==null?x.identity:k(n);var i=n.call(r,t),s=0,o=e.length;while(s<o){var u=s+o>>>1;n.call(r,e[u])<i?s=u+1:o=u}return s},x.toArray=function(e){return e?x.isArray(e)?u.call(e):e.length===+e.length?x.map(e,x.identity):x.values(e):[]},x.size=function(e){return e==null?0:e.length===+e.length?e.length:x.keys(e).length},x.first=x.head=x.take=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,0,t):e[0]},x.initial=function(e,t,n){return u.call(e,0,e.length-(t==null||n?1:t))},x.last=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,Math.max(e.length-t,0)):e[e.length-1]},x.rest=x.tail=x.drop=function(e,t,n){return u.call(e,t==null||n?1:t)},x.compact=function(e){return x.filter(e,x.identity)};var A=function(e,t,n){return T(e,function(e){x.isArray(e)?t?o.apply(n,e):A(e,t,n):n.push(e)}),n};x.flatten=function(e,t){return A(e,t,[])},x.without=function(e){return x.difference(e,u.call(arguments,1))},x.uniq=x.unique=function(e,t,n,r){x.isFunction(t)&&(r=n,n=t,t=!1);var i=n?x.map(e,n,r):e,s=[],o=[];return T(i,function(n,r){if(t?!r||o[o.length-1]!==n:!x.contains(o,n))o.push(n),s.push(e[r])}),s},x.union=function(){return x.uniq(a.apply(r,arguments))},x.intersection=function(e){var t=u.call(arguments,1);return x.filter(x.uniq(e),function(e){return x.every(t,function(t){return x.indexOf(t,e)>=0})})},x.difference=function(e){var t=a.apply(r,u.call(arguments,1));return x.filter(e,function(e){return!x.contains(t,e)})},x.zip=function(){var e=u.call(arguments),t=x.max(x.pluck(e,"length")),n=new Array(t);for(var r=0;r<t;r++)n[r]=x.pluck(e,""+r);return n},x.unzip=function(e){var t=[];return x.each(e,function(e,n){x.each(e,function(e,r){t.length<=r&&(t[r]=[]),t[r][n]=e})}),t},x.object=function(e,t){if(e==null)return{};var n={};for(var r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},x.indexOf=function(e,t,n){if(e==null)return-1;var r=0,i=e.length;if(n){if(typeof n!="number")return r=x.sortedIndex(e,t),e[r]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(y&&e.indexOf===y)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},x.lastIndexOf=function(e,t,n){if(e==null)return-1;var r=n!=null;if(b&&e.lastIndexOf===b)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);var i=r?n:e.length;while(i--)if(e[i]===t)return i;return-1},x.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s};var O=function(){};x.bind=function(e,t){var n,r;if(e.bind===S&&S)return S.apply(e,u.call(arguments,1));if(!x.isFunction(e))throw new TypeError;return n=u.call(arguments,2),r=function(){if(this instanceof r){O.prototype=e.prototype;var i=new O;O.prototype=null;var s=e.apply(i,n.concat(u.call(arguments)));return Object(s)===s?s:i}return e.apply(t,n.concat(u.call(arguments)))}},x.partial=function(e){var t=u.call(arguments,1);return function(){return e.apply(this,t.concat(u.call(arguments)))}},x.bindAll=function(e){var t=u.call(arguments,1);if(t.length===0)throw new Error("bindAll must be passed function names");return T(t,function(t){e[t]=x.bind(e[t],e)}),e},x.memoize=function(e,t){var n={};return t||(t=x.identity),function(){var r=t.apply(this,arguments);return x.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},x.delay=function(e,t){var n=u.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},x.defer=function(e){return x.delay.apply(x,[e,1].concat(u.call(arguments,1)))},x.throttle=function(e,t,n){var r,i,s,o,u=0,a=function(){u=new Date,s=null,o=e.apply(r,i)};return function(){var f=new Date;!u&&n===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0?(clearTimeout(s),s=null,u=f,o=e.apply(r,i)):s||(s=setTimeout(a,l)),o}},x.debounce=function(e,t,n){var r,i;return function(){var s=this,o=arguments,u=function(){r=null,n||(i=e.apply(s,o))},a=n&&!r;return clearTimeout(r),r=setTimeout(u,t),a&&(i=e.apply(s,o)),i}},x.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}},x.wrap=function(e,t){return function(){var n=[e];return o.apply(n,arguments),t.apply(this,n)}},x.compose=function(){var e=arguments;return function(){var t=arguments;for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},x.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},x.keys=E||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)x.has(e,n)&&t.push(n);return t},x.values=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push(e[n]);return t},x.pairs=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push([n,e[n]]);return t},x.invert=function(e){var t={};for(var n in e)x.has(e,n)&&(t[e[n]]=n);return t},x.functions=x.methods=function(e){var t=[];for(var n in e)x.isFunction(e[n])&&t.push(n);return t.sort()},x.extend=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e},x.pick=function(e){var t={},n=a.apply(r,u.call(arguments,1));return T(n,function(n){n in e&&(t[n]=e[n])}),t},x.omit=function(e){var t={},n=a.apply(r,u.call(arguments,1));for(var i in e)x.contains(n,i)||(t[i]=e[i]);return t},x.defaults=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e},x.clone=function(e){return x.isObject(e)?x.isArray(e)?e.slice():x.extend({},e):e},x.tap=function(e,t){return t(e),e};var M=function(e,t,n,r){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return e===t;e instanceof x&&(e=e._wrapped),t instanceof x&&(t=t._wrapped);var i=f.call(e);if(i!=f.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(typeof e!="object"||typeof t!="object")return!1;var s=n.length;while(s--)if(n[s]==e)return r[s]==t;n.push(e),r.push(t);var o=0,u=!0;if(i=="[object Array]"){o=e.length,u=o==t.length;if(u)while(o--)if(!(u=M(e[o],t[o],n,r)))break}else{var a=e.constructor,l=t.constructor;if(a!==l&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(l)&&l instanceof l))return!1;for(var c in e)if(x.has(e,c)){o++;if(!(u=x.has(t,c)&&M(e[c],t[c],n,r)))break}if(u){for(c in t)if(x.has(t,c)&&!(o--))break;u=!o}}return n.pop(),r.pop(),u};x.isEqual=function(e,t){return M(e,t,[],[])},x.isEmpty=function(e){if(e==null)return!0;if(x.isArray(e)||x.isString(e))return e.length===0;for(var t in e)if(x.has(e,t))return!1;return!0},x.isElement=function(e){return!!e&&e.nodeType===1},x.isArray=w||function(e){return f.call(e)=="[object Array]"},x.isObject=function(e){return e===Object(e)},T(["Arguments","Function","String","Number","Date","RegExp"],function(e){x["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}}),x.isArguments(arguments)||(x.isArguments=function(e){return!!e&&!!x.has(e,"callee")}),typeof /./!="function"&&(x.isFunction=function(e){return typeof e=="function"}),x.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},x.isNaN=function(e){return x.isNumber(e)&&e!=+e},x.isBoolean=function(e){return e===!0||e===!1||f.call(e)=="[object Boolean]"},x.isNull=function(e){return e===null},x.isUndefined=function(e){return e===void 0},x.has=function(e,t){return l.call(e,t)},x.noConflict=function(){return e._=t,this},x.identity=function(e){return e},x.times=function(e,t,n){var r=Array(e);for(var i=0;i<e;i++)r[i]=t.call(n,i);return r},x.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var _={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};_.unescape=x.invert(_.escape);var D={escape:new RegExp("["+x.keys(_.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(_.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(e){x[e]=function(t){return t==null?"":(""+t).replace(D[e],function(t){return _[e][t]})}}),x.result=function(e,t){if(e==null)return void 0;var n=e[t];return x.isFunction(n)?n.call(e):n},x.mixin=function(e){T(x.functions(e),function(t){var n=x[t]=e[t];x.prototype[t]=function(){var e=[this._wrapped];return o.apply(e,arguments),F.call(this,n.apply(x,e))}})};var P=0;x.uniqueId=function(e){var t=++P+"";return e?e+t:t},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var H=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},j=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(e,t,n){var r;n=x.defaults({},n,x.templateSettings);var i=new RegExp([(n.escape||H).source,(n.interpolate||H).source,(n.evaluate||H).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(j,function(e){return"\\"+B[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,x);var a=function(e){return r.call(this,e,x)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},x.chain=function(e){return x(e).chain()};var F=function(e){return this._chain?x(e).chain():e};x.mixin(x),T(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];x.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],F.call(this,n)}}),T(["concat","join","slice"],function(e){var t=r[e];x.prototype[e]=function(){return F.call(this,t.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}.call(this),define("libs/underscore",function(e){return function(){var t,n;return t||e._}}(this)),define("utils/utils",["libs/underscore"],function(e){function t(e,t,r){n("GET",e,{},t,r)}function n(e,t,n,r,i){if(e=="GET"||e=="DELETE")t.indexOf("?")==-1?t+="?":t+="&",t+=$.param(n);var s=new XMLHttpRequest;s.open(e,t,!0),s.setRequestHeader("Accept","application/json"),s.setRequestHeader("Cache-Control","no-cache"),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.setRequestHeader("Content-Type","application/json"),s.onloadend=function(){var e=s.status;try{response=jQuery.parseJSON(s.responseText)}catch(t){response=s.responseText}e==200?r&&r(response):i&&i(response)},e=="GET"||e=="DELETE"?s.send():s.send(JSON.stringify(n))}function r(e,t){var n=$('<div class="'+e+'"></div>');n.appendTo(":eq(0)");var r=n.css(t);return n.remove(),r}function i(e){$('link[href^="'+e+'"]').length||$('<link href="'+galaxy_config.root+e+'" rel="stylesheet">').appendTo("head")}function s(t,n){return t?e.defaults(t,n):n}function o(e,t){var n="";if(e>=1e11)e/=1e11,n="TB";else if(e>=1e8)e/=1e8,n="GB";else if(e>=1e5)e/=1e5,n="MB";else if(e>=100)e/=100,n="KB";else{if(!(e>0))return"<strong>-</strong>";e*=10,n="b"}var r=Math.round(e)/10;return t?r+" "+n:"<strong>"+r+"</strong> "+n}function u(){return(new Date).getTime().toString(36)}function a(e){var t=$("<p></p>");return t.append(e),t}function f(){var e=new Date,t=(e.getHours()<10?"0":"")+e.getHours(),n=(e.getMinutes()<10?"0":"")+e.getMinutes(),r=e.getDate()+"/"+(e.getMonth()+1)+"/"+e.getFullYear()+", "+t+":"+n;return r}return{cssLoadFile:i,cssGetAttribute:r,get:t,merge:s,bytesToString:o,uuid:u,time:f,wrap:a,request:n}}),define("mvc/ui/ui-portlet",["utils/utils"],function(e){var t=Backbone.View.extend({visible:!1,optionsDefault:{title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom"},$title:null,$content:null,$buttons:null,$operations:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.$content=this.$el.find("#content"),this.$title=this.$el.find("#portlet-header-text");var n=this.$el.find("#portlet-content");this.options.scrollable?n.addClass("scroll"):this.options.title?n.addClass("no-scroll"):n.addClass("no-scroll-no-title"),this.options.nopadding&&(n.css("padding","0px"),this.$content.css("padding","0px")),this.$buttons=$(this.el).find("#buttons");if(this.options.buttons){var r=this;$.each(this.options.buttons,function(e,t){t.$el.prop("id",e),r.$buttons.append(t.$el)})}else this.$buttons.remove();this.$operations=$(this.el).find("#operations");if(this.options.operations){var r=this;$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$operations.append(t.$el)})}this.options.body&&this.append(this.options.body)},append:function(t){this.$content.append(e.wrap(t))},content:function(){return this.$content},show:function(){this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},enableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!1)},disableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!0)},hideOperation:function(e){this.$operations.find("#"+e).hide()},showOperation:function(e){this.$operations.find("#"+e).show()},setOperation:function(e,t){var n=this.$operations.find("#"+e);n.off("click"),n.on("click",t)},title:function(e){var t=this.$title;return e&&t.html(e),t.html()},_template:function(e){var t='<div class="ui-portlet">';return e.title&&(t+='<div id="portlet-header" class="portlet-header"><div id="operations" style="float: right;"></div><h3>',e.icon&&(t+='<i class="icon fa '+e.icon+'"> </i>'),t+='<span id="portlet-header-text">'+e.title+"</span>"+"</h3>"+"</div>"),t+='<div id="portlet-content" class="portlet-content">',e.placement=="top"&&(t+='<div id="buttons" class="buttons"></div>'),t+='<div id="content" class="content"></div>',e.placement=="bottom"&&(t+='<div id="buttons" class="buttons"></div>'),t+="</div></div>",t}});return{View:t}}),define("plugin/library/ui-select",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:!0,wait:!1},selected:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.selected=this.options.value,this.setElement(this._template(this.options)),this.$select=this.$el.find("#select"),this.$icon=this.$el.find("#icon");var n=this;this.$select.on("change",function(){n.value(n.$select.val())}),this.on("change",function(){n.options.onchange&&n.options.onchange(n.value())}),this._refresh(),this.options.visible||this.hide(),this.options.wait?this.wait():this.show()},value:function(e){var t=this.selected;e!==undefined&&(this.selected=e,this.$select.val(e));var n=this.selected;return n&&n!=t&&this.options.onchange&&this.options.onchange(n),n},first:function(){var e=this.$select.find("option");return e.length>0?e.val():undefined},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-caret-down"),this.$select.show(),this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-spinner fa-spin"),this.$select.hide()},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",!1)},disable:function(){this.$select.prop("disabled",!0)},add:function(e){this.$select.append(this._templateOption(e)),this._refresh()},del:function(e){this.$select.find("option[value="+e+"]").remove(),this.$select.trigger("change"),this._refresh()},update:function(e){this.$select.find("option").remove();for(var t in e)this.$select.append(this._templateOption(e[t]));this._refresh()},setOnChange:function(e){this.options.onchange=e},exists:function(e){return this.$select.find("option[value="+e+"]").length>0},_refresh:function(){this.$select.find("option[value=null]").remove();var e=this.$select.find("option").length;e==0?(this.disable(),this.$select.append(this._templateOption({value:"null",label:this.options.empty}))):this.enable(),this.selected&&this.$select.val(this.selected)},_templateOption:function(e){return'<option value="'+e.value+'">'+e.label+"</option>"},_template:function(e){var t='<div id="'+e.id+'" class="ui-select">'+'<div class="button">'+'<i id="icon"/>'+"</div>"+'<select id="select" class="select '+e.cls+" "+e.id+'">';for(key in e.data){var n=e.data[key],r="";if(n.value==e.value||n.value=="")r="selected";t+='<option value="'+n.value+'" '+r+">"+n.label+"</option>"}return t+="</select></div>",t}});return{View:t}}),define("plugin/library/ui",["utils/utils","plugin/library/ui-select","mvc/ui/ui-modal"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{url:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},_template:function(e){return'<img class="ui-image '+e.cls+'" src="'+e.url+'"/>'}}),i=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},title:function(e){this.$el.html(e)},_template:function(e){return'<label class="ui-label '+e.cls+'">'+e.title+"</label>"},value:function(){return options.title}}),s=Backbone.View.extend({optionsDefault:{id:null,title:"","float":"right",cls:"btn btn-default",icon:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t='<button id="'+e.id+'" type="submit" style="float: '+e.float+';" type="button" class="ui-button '+e.cls+'">';return e.icon&&(t+='<i class="icon fa '+e.icon+'"></i> '),t+=e.title+"</button>",t}}),o=Backbone.View.extend({optionsDefault:{"float":"right",icon:"",tooltip:"",placement:"bottom",title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){return'<div><span class="fa '+e.icon+'" class="ui-icon"/> '+e.title+"</div>"}}),u=Backbone.View.extend({optionsDefault:{title:"",id:null,"float":"right",cls:"icon-btn",icon:"",tooltip:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t="";e.title&&(t="width: auto;");var n='<div id="'+e.id+'" style="float: '+e.float+"; "+t+'" class="ui-button-icon '+e.cls+'">';return e.title?n+='<div class="button"><i class="icon fa '+e.icon+'"/> '+'<span class="title">'+e.title+"</span>"+"</div>":n+='<i class="icon fa '+e.icon+'"/>',n+="</div>",n}}),a=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick)},_template:function(e){return'<div><a href="javascript:void(0)" class="ui-anchor '+e.cls+'">'+e.title+"</a></div>"}}),f=Backbone.View.extend({optionsDefault:{message:"",status:"info",persistent:!1},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement("<div></div>")},update:function(t){this.options=e.merge(t,this.optionsDefault);if(t.message!=""){this.$el.html(this._template(this.options)),this.$el.find(".alert").append(t.message),this.$el.fadeIn();if(!t.persistent){var n=this;window.setTimeout(function(){n.$el.is(":visible")?n.$el.fadeOut():n.$el.hide()},3e3)}}else this.$el.fadeOut()},_template:function(e){return'<div class="ui-message alert alert-'+e.status+'"/>'}}),l=Backbone.View.extend({optionsDefault:{onclick:null,searchword:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options));var n=this;this.options.onclick&&this.$el.on("submit",function(e){var t=n.$el.find("#search");n.options.onclick(t.val())})},_template:function(e){return'<div class="ui-search"><form onsubmit="return false;"><input id="search" class="form-control input-sm" type="text" name="search" placeholder="Search..." value="'+e.searchword+'">'+'<button type="submit" class="btn search-btn">'+'<i class="fa fa-search"></i>'+"</button>"+"</form>"+"</div>"}}),c=Backbone.View.extend({optionsDefault:{id:"",title:"",target:"",href:"",onunload:null,onclick:null,visible:!0,icon:null,tag:""},$menu:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement($(this._template(this.options)));var n=$(this.el).find(".root"),r=this;n.on("click",function(e){e.preventDefault(),r.options.onclick&&r.options.onclick()}),this.options.visible||this.hide()},show:function(){$(this.el).show()},hide:function(){$(this.el).hide()},addMenu:function(t){var n={title:"",target:"",href:"",onclick:null,divider:!1,icon:null,cls:"button-menu btn-group"};n=e.merge(t,n),this.$menu||($(this.el).append(this._templateMenu()),this.$menu=$(this.el).find(".menu"));var r=$(this._templateMenuItem(n));r.on("click",function(e){e.preventDefault(),n.onclick&&n.onclick()}),this.$menu.append(r),n.divider&&this.$menu.append($(this._templateDivider()))},_templateMenuItem:function(e){var t='<li><a href="'+e.href+'" target="'+e.target+'">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),t+=" "+e.title+"</a>"+"</li>",t},_templateMenu:function(){return'<ul class="menu dropdown-menu pull-right" role="menu"></ul>'},_templateDivider:function(){return'<li class="divider"></li>'},_template:function(e){var t='<div id="'+e.id+'" class="ui-button-menu '+e.cls+'">'+'<button type="button" class="root btn btn-default dropdown-toggle" data-toggle="dropdown">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),"</button></div>",t}}),h=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<input id="'+e.id+'" type="'+e.type+'" value="'+e.value+'" placeholder="'+e.placeholder+'" class="ui-input '+e.cls+'">'}}),p=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<textarea id="'+e.id+'" class="ui-textarea '+e.cls+'" rows="5"></textarea>'}}),d=Backbone.View.extend({optionsDefault:{value:"",visible:!0,cls:"",data:[],id:e.uuid()},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.visible||this.$el.hide(),this.options.value&&this.value(this.options.value),this.current=this.options.value;var n=this;this.$el.find("input").on("change",function(){n.value(n._getValue())})},value:function(e){var t=this.current;e!==undefined&&(this.$el.find("label").removeClass("active"),this.$el.find('[value="'+e+'"]').closest("label").addClass("active"),this.current=e);var n=this.current;return n!=t&&this.options.onchange&&this.options.onchange(this.current),this.current},_getValue:function(){var e=this.$el.find(":checked"),t=null;return e.length>0&&(t=e.val()),t},_template:function(e){var t='<div class="btn-group ui-radiobutton" data-toggle="buttons">';for(key in e.data){var n=e.data[key];t+='<label class="btn btn-default"><input type="radio" name="'+e.id+'" value="'+n.value+'" selected>'+n.label+"</label>"}return t+="</div>",t}});return{Label:i,Button:s,Icon:o,ButtonIcon:u,Input:h,Anchor:a,Message:f,Searchbox:l,Select:t,ButtonMenu:c,Modal:n,Textarea:p,Image:r,RadioButton:d}}),define("plugin/library/jobs",["utils/utils"],function(e){return Backbone.Model.extend({initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n,r,i){var s=this;e.state("wait","Requesting job results...");var o=e.get("dataset_id_job");o!=""?s._wait(e,r,i):s._submit(e,t,n,r,i)},cleanup:function(t){var n=this,r=t.get("dataset_id_job");r!=""&&(e.request("PUT",config.root+"api/histories/none/contents/"+r,{deleted:!0},function(){n._refreshHdas()}),t.set("dataset_id_job",""))},_submit:function(t,n,r,i,s){var o=this,u=t.id,a=t.get("type"),f=t.definition;data={tool_id:"charts",inputs:{input:{id:t.get("dataset_id"),src:"hda"},module:f.execute,columns:r,settings:n}},t.state("wait","Sending job request..."),e.request("POST",config.root+"api/tools",data,function(e){if(!e.outputs||e.outputs.length==0)t.state("failed","Job submission failed. No response."),s&&s();else{o._refreshHdas();var n=e.outputs[0];t.state("wait","Your job has been queued. You may close the browser window. The job will run in the background."),t.set("dataset_id_job",n.id),this.app.storage.save(),o._wait(t,i,s)}},function(e){var n="";e&&e.message&&e.message.data&&e.message.data.input&&(n=e.message.data.input+"."),t.state("failed","This visualization requires the 'charts' tool. Please make sure it is installed. "+n),s&&s()})},_wait:function(t,n,r){var i=this;e.request("GET",config.root+"api/datasets/"+t.get("dataset_id_job"),{},function(e){var s=!1;switch(e.state){case"ok":t.state("wait","Job completed successfully..."),n&&n(e),s=!0;break;case"error":t.state("failed","Job has failed. Please check the history for details."),r&&r(e),s=!0;break;case"running":t.state("wait","Your job is running. You may close the browser window. The job will continue in the background.")}s||setTimeout(function(){i._wait(t,n,r)},i.app.config.get("query_timeout"))})},_refreshHdas:function(){Galaxy&&Galaxy.currHistoryPanel&&Galaxy.currHistoryPanel.refreshContents()}})}),define("plugin/library/datasets",["utils/utils"],function(e){return Backbone.Collection.extend({list:{},cache:{},initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n){var r=this;e.groups?this._get_dataset(e.id,function(){r._get(e,t)}):this._get_dataset(e.id,t,n)},_get_dataset:function(t,n,r){var i=this.list[t];if(i){n(i);return}var s=this;e.request("GET",config.root+"api/datasets/"+t,{},function(e){switch(e.state){case"error":r&&r(e);break;default:s.list[t]=e,n(e)}})},_block_id:function(e,t){return e.id+"_"+e.start+"_"+e.end+"_"+t},_get:function(e,t){e.start||(e.start=0),e.end||(e.end=this.app.config.get("query_limit"));var n=[],r={},i=0;for(var s in e.groups){var o=e.groups[s];for(var u in o.columns){var a=o.columns[u].index,f=this._block_id(e,a);if(this.cache[f]||a==="auto")continue;!r[a]&&a!==undefined&&(r[a]=i,n.push(a),i++)}}if(n.length==0){this._fill_from_cache(e),t(e);return}var l={dataset_id:e.id,start:e.start,end:e.end,columns:n},c=this;this._fetch(l,function(r){for(var i in r){var s=n[i],o=c._block_id(e,s);c.cache[o]=r[i]}c._fill_from_cache(e),t(e)})},_fill_from_cache:function(e){console.debug("Datasets::_fill_from_cache() - Filling request from cache.");var t=e.start,n=0;for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s],u=this._block_id(e,o.index),a=this.cache[u];a&&(n=Math.max(n,a.length))}}n==0&&console.debug("FAILED - Datasets::_fill_from_cache() - Invalid range.");for(var r in e.groups){var i=e.groups[r];i.values=[];for(var f=0;f<n;f++)i.values[f]={x:parseInt(f)+t}}for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s];if(o.index=="auto")for(var f=0;f<n;f++){var l=i.values[f];l[s]=parseInt(f)+t}else{var u=this._block_id(e,o.index),a=this.cache[u];for(var f=0;f<n;f++){var l=i.values[f],c=a[f];isNaN(c)&&!o.is_label&&(c=0),l[s]=c}}}}},_fetch:function(t,n){var r=t.start?t.start:0,i=Math.abs(t.end-t.start),s=this.app.config.get("query_limit");if(!i||i>s)i=s;var o=0;t.columns&&(o=t.columns.length,console.debug("Datasets::_fetch() - Fetching "+o+" column(s)")),o==0&&console.debug("Datasets::_fetch() - No columns requested");var u="";for(var a in t.columns)u+=t.columns[a]+",";u=u.substring(0,u.length-1);var f=this;e.request("GET",config.root+"api/datasets/"+t.dataset_id,{data_type:"raw_data",provider:"dataset-column",limit:i,offset:r,indeces:u},function(e){var t=new Array(o);for(var r=0;r<o;r++)t[r]=[];for(var r in e.data){var i=e.data[r];for(var s in i){var u=i[s];u!==undefined&&u!=2147483647&&t[s].push(u)}}console.debug("Datasets::_fetch() - Fetching complete."),n(t)})}})}),define("plugin/models/group",[],function(){return Backbone.Model.extend({defaults:{key:"Data label",date:""},reset:function(){this.clear({silent:!0}).set(this.defaults),this.trigger("reset",this)}})}),define("plugin/models/groups",["plugin/models/group"],function(e){return Backbone.Collection.extend({model:e})}),define("plugin/library/deferred",["utils/utils"],function(e){return Backbone.Model.extend({queue:[],process:{},counter:0,initialize:function(){this.on("refresh",function(){for(var e in this.queue)if(this.counter==0){var t=this.queue[e];this.queue.splice(e,1),t()}})},execute:function(e){this.queue.push(e),this.trigger("refresh")},register:function(){var t=e.uuid();return this.process[t]=!0,this.counter++,console.debug("Deferred:register() - Registering "+t),t},done:function(e){this.process[e]&&(delete this.process[e],this.counter--,console.debug("Deferred:done() - Unregistering "+e),this.trigger("refresh"))},ready:function(){return this.counter==0}})});var Visualization=Backbone.Model.extend({defaults:{config:{}},urlRoot:function(){var e="/api/visualizations";return window.galaxy_config&&galaxy_config.root?galaxy_config.root+e:e},initialize:function(e){_.isObject(e.config)&&_.isObject(this.defaults.config)&&_.defaults(e.config,this.defaults.config),this._setUpListeners()},_setUpListeners:function(){},set:function(e,t){if(e==="config"){var n=this.get("config");_.isObject(n)&&(t=_.extend(_.clone(n),t))}return Backbone.Model.prototype.set.call(this,e,t),this},toString:function(){var e=this.get("id")||"";return this.get("title")&&(e+=":"+this.get("title")),"Visualization("+e+")"}}),VisualizationCollection=Backbone.Collection.extend({model:Visualization,url:function(){return galaxy_config.root+"api/visualizations"},initialize:function(e,t){t=t||{}},set:function(e,t){var n=this;e=_.map(e,function(e){var t=n.get(e.id);if(!t)return e;var r=t.toJSON();return _.extend(r,e),r}),Backbone.Collection.prototype.set.call(this,e,t)},toString:function(){return["VisualizationCollection(",[this.historyId,this.length].join(),")"].join("")}});define("mvc/visualization/visualization-model",function(){}),define("plugin/models/chart",["plugin/models/groups","plugin/library/deferred","mvc/visualization/visualization-model"],function(e,t){return Backbone.Model.extend({defaults:{id:null,title:"",type:"",date:null,state:"",state_info:"",modified:!1,dataset_id:"",dataset_id_job:""},initialize:function(n){this.groups=new e,this.settings=new Backbone.Model,this.deferred=new t},reset:function(){this.clear({silent:!0}).set(this.defaults),this.groups.reset(),this.settings.clear(),this.trigger("reset",this)},copy:function(e){var t=this;t.clear({silent:!0}).set(this.defaults),t.set(e.attributes),t.settings=e.settings.clone(),t.groups.reset(),e.groups.each(function(e){t.groups.add(e.clone())}),t.trigger("change",t)},state:function(e,t){this.set("state",e),this.set("state_info",t),this.trigger("set:state"),console.debug("Chart:state() - "+t+" ("+e+")")}})}),define("plugin/library/storage",["utils/utils","plugin/models/chart","plugin/models/group"],function(e,t,n){return Backbone.Model.extend({vis:null,initialize:function(e){this.app=e,this.chart=this.app.chart,this.options=this.app.options,this.id=this.options.id,this.vis=new Visualization({type:"charts",config:{dataset_id:this.options.config.dataset_id,chart_dict:{}}}),this.id&&(this.vis.id=this.id);var t=this.options.config.chart_dict;t&&(this.vis.get("config").chart_dict=t)},save:function(){var e=this.app.chart;this.vis.get("config").chart_dict={};var t=e.get("title");t!=""&&this.vis.set("title",t);var n={attributes:e.attributes,settings:e.settings.attributes,groups:[]};e.groups.each(function(e){n.groups.push(e.attributes)}),this.vis.get("config").chart_dict=n;var r=this;this.vis.save().fail(function(e,t,n){console.error(e,t,n)}).then(function(e){e&&e.id&&(r.id=e.id)})},load:function(){var e=this.vis.get("config").chart_dict;if(!e.attributes)return!1;var t=e.attributes.type;if(!t)return console.debug("Storage::load() - Chart type not provided. Invalid format."),!1;var r=this.app.types.get(t);if(!r)return console.debug("Storage::load() - Chart type not supported. Please re-configure the chart. Resetting chart."),!1;console.debug("Storage::load() - Loading chart type "+t+"."),this.chart.definition=r,this.chart.set(e.attributes),this.chart.state("ok","Loading saved visualization..."),this.chart.settings.set(e.settings);for(var i in e.groups)this.chart.groups.add(new n(e.groups[i]));return this.chart.set("modified",!1),!0}})}),define("plugin/library/screenshot",["libs/underscore"],function(e){function t(e,t,i){e.find("svg").length>0?r(e,t,i):n(e)}function n(e){e.find("#canvas").jqplotSaveImage({})}function r(e,t,n){var r=new XMLSerializer,o="",u=this,a=0,f=0;return e.find("svg").each(function(){var e=$(this);i(e),a=parseInt(e.css("height")),f=parseInt(e.css("width")),e.attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:f,height:a}),e.find(".highcharts-button").hide(),o+=r.serializeToString(this),e.find(".highcharts-button").show()}),s(e,t,{filename:n||"chart",type:"application/pdf",height:a,width:f,scale:2,svg:o}),o}function i(e){for(var t in document.styleSheets){var n=document.styleSheets[t],r=n.cssRules;if(r)for(var i=0,s=r.length;i<s;i++)try{e.find(r[i].selectorText).each(function(e,t){t.style.cssText+=r[i].style.cssText})}catch(o){}}}function s(e,t,n){var r=e.find("#viewport-form");r.length===0&&(r=$("<form>",{id:"viewport-form",method:"post",action:t,display:"none"}),e.append(r)),r.empty();for(name in n){var i=$("<input/>",{type:"hidden",name:name,value:n[name]});r.append(i)}try{r.submit()}catch(s){console.log(s)}}return{create:t}}),define("plugin/views/viewport",["mvc/ui/ui-portlet","plugin/library/ui","plugin/library/screenshot","utils/utils"],function(e,t,n,r){return Backbone.View.extend({container_list:[],canvas_list:[],initialize:function(e,t){this.app=e,this.chart=this.app.chart,this.options=r.merge(t,this.optionsDefault),this.setElement($(this._template())),this._fullscreen(this.$el,100),this._createContainer("div");var n=this;this.chart.on("redraw",function(){n._draw(n.chart)}),this.chart.on("set:state",function(){var e=n.$el.find("#info"),t=n.$el.find(".charts-viewport-container"),r=e.find("#icon");r.removeClass(),e.show(),e.find("#text").html(n.chart.get("state_info"));var i=n.chart.get("state");switch(i){case"ok":e.hide(),t.show();break;case"failed":r.addClass("icon fa fa-warning"),t.hide();break;default:r.addClass("icon fa fa-spinner fa-spin"),t.show()}})},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_fullscreen:function(e,t){e.css("height",$(window).height()-t),$(window).resize(function(){e.css("height",$(window).height()-t)})},_createContainer:function(e,t){t=t||1;for(var n in this.container_list)this.container_list[n].remove();this.container_list=[],this.canvas_list=[];for(var n=0;n<t;n++){var r=$(this._templateContainer(e,parseInt(100/t)));this.$el.append(r),this.container_list[n]=r,e=="svg"?this.canvas_list[n]=d3.select(r.find("#canvas")[0]):this.canvas_list[n]=r.find("#canvas")}},_draw:function(e){var t=this,n=e.deferred.register(),r=e.get("type");this.chart_definition=e.definition;var i=this.chart_definition.use_panels||e.settings.get("use_panels")==="true",s=1;i&&(s=e.groups.length),this._createContainer(this.chart_definition.tag,s),e.state("wait","Please wait...");if(!this.chart_definition.execute||this.chart_definition.execute&&e.get("modified"))this.app.jobs.cleanup(e),e.set("modified",!1);var t=this;require(["plugin/charts/"+this.app.chartPath(r)+"/wrapper"],function(r){var i=new r(t.app,{canvas:t.canvas_list});t.chart_definition.execute?t.app.jobs.request(e,t._defaultSettingsString(e),t._defaultRequestString(e),function(){i.draw(n,e,t._defaultRequestDictionary(e))},function(){e.deferred.done(n)}):i.draw(n,e,t._defaultRequestDictionary(e))})},_defaultRequestString:function(e){var t="",n=0,r=this;return e.groups.each(function(e){n++;for(var i in r.chart_definition.columns)t+=i+"_"+n+":"+(parseInt(e.get(i))+1)+", "}),t.substring(0,t.length-2)},_defaultSettingsString:function(e){var t="";for(key in e.settings.attributes)t+=key+":"+e.settings.get(key)+", ";return t.substring(0,t.length-2)},_defaultRequestDictionary:function(e){var t={groups:[]};this.chart_definition.execute?t.id=e.get("dataset_id_job"):t.id=e.get("dataset_id");var n=0,i=this;return e.groups.each(function(e){var s={};for(var o in i.chart_definition.columns){var u=i.chart_definition.columns[o];s[o]=r.merge({index:e.get(o)},u)}t.groups.push({key:++n+":"+e.get("key"),columns:s})}),t},_template:function(){return'<div class="charts-viewport"><div id="info" class="info"><span id="icon" class="icon" /><span id="text" class="text" /></div></div>'},_templateContainer:function(e,t){return'<div class="charts-viewport-container" style="width:'+t+'%;">'+'<div id="menu"/>'+"<"+e+' id="canvas" class="charts-viewport-canvas">'+"</div>"}})}),define("plugin/views/viewer",["utils/utils","plugin/library/ui","mvc/ui/ui-portlet","plugin/models/group","plugin/views/viewport","plugin/library/screenshot"],function(e,t,n,r,i,s){return Backbone.View.extend({initialize:function(e,r){this.app=e,this.chart=this.app.chart,this.viewport_view=new i(e);var o=this;this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Viewport",scrollable:!1,operations:{edit_button:new t.ButtonIcon({icon:"fa-edit",tooltip:"Customize this chart",title:"Editor",onclick:function(){o._wait(o.chart,function(){o.app.go("editor")})}}),picture_button:new t.ButtonIcon({icon:"fa-camera",tooltip:"SVGs are converted to PDF via "+o.app.config.get("screenshot_url")+" and CANVAS-based charts to PNG-files.",title:"Screenshot",onclick:function(){o._wait(o.chart,function(){s.create(o.viewport_view.$el,o.app.config.get("screenshot_url"),o.chart.get("title"))})}})}}),this.portlet.append(this.message.$el),this.portlet.append(this.viewport_view.$el),this.setElement(this.portlet.$el);var o=this;this.chart.on("change:title",function(){o._refreshTitle()})},show:function(){this.$el.show(),$(window).trigger("resize")},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e)},_wait:function(e,t){e.deferred.ready()?t():this.message.update({message:"Your chart is currently being processed. Please wait and try again."})}})}),define("mvc/ui/ui-tabs",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{title_new:"",operations:null,onnew:null},initialize:function(t){this.visible=!1,this.$nav=null,this.$content=null,this.first_tab=null,this.options=e.merge(t,this.optionsDefault);var n=$(this._template(this.options));this.$nav=n.find(".tab-navigation"),this.$content=n.find(".tab-content"),this.setElement(n),this.list={};var r=this;this.options.operations&&$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$nav.find(".operations").append(t.$el)});if(this.options.onnew){var i=$(this._template_tab_new(this.options));this.$nav.append(i),i.tooltip({title:"Add a new tab",placement:"bottom",container:r.$el}),i.on("click",function(e){i.tooltip("hide"),r.options.onnew()})}},add:function(e){var t=this,n=e.id,r=$(this._template_tab(e)),i=$(this._template_tab_content(e));this.list[n]=e.ondel?!0:!1,this.options.onnew?this.$nav.find("#new-tab").before(r):this.$nav.append(r),i.append(e.$el),this.$content.append(i),_.size(this.list)==1&&(r.addClass("active"),i.addClass("active"),this.first_tab=n);if(e.ondel){var s=r.find("#delete");s.tooltip({title:"Delete this tab",placement:"bottom",container:t.$el}),s.on("click",function(){return s.tooltip("destroy"),t.$el.find(".tooltip").remove(),e.ondel(),!1})}r.on("click",function(r){r.preventDefault(),e.onclick?e.onclick():t.show(n)})},del:function(e){this.$el.find("#tab-"+e).remove(),this.$el.find("#tab-content-"+e).remove(),this.first_tab==e&&(this.first_tab=null),this.first_tab!=null&&this.show(this.first_tab)},delRemovable:function(){for(var e in this.list)this.list[e]&&this.del(e)},show:function(e){this.$el.fadeIn("fast"),this.visible=!0,e&&(this.$el.find(".tab-element").removeClass("active"),this.$el.find(".tab-pane").removeClass("active"),this.$el.find("#tab-"+e).addClass("active"),this.$el.find("#tab-content-"+e).addClass("active"))},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},hideOperation:function(e){this.$nav.find("#"+e).hide()},showOperation:function(e){this.$nav.find("#"+e).show()},setOperation:function(e,t){var n=this.$nav.find("#"+e);n.off("click"),n.on("click",t)},title:function(e,t){var n=this.$el.find("#tab-title-text-"+e);return t&&n.html(t),n.html()},_template:function(e){return'<div class="ui-tabs tabbable tabs-left"><ul id="tab-navigation" class="tab-navigation nav nav-tabs"><div class="operations" style="float: right; margin-bottom: 4px;"></div></ul><div id="tab-content" class="tab-content"/></div>'},_template_tab_new:function(e){return'<li id="new-tab"><a href="javascript:void(0);"><i class="ui-tabs-add fa fa-plus-circle"/>'+e.title_new+"</a>"+"</li>"},_template_tab:function(e){var t='<li id="tab-'+e.id+'" class="tab-element">'+'<a id="tab-title-link-'+e.id+'" title="" href="#tab-content-'+e.id+'" data-original-title="">'+'<span id="tab-title-text-'+e.id+'">'+e.title+"</span>";return e.ondel&&(t+='<i id="delete" class="ui-tabs-delete fa fa-minus-circle"/>'),t+="</a></li>",t},_template_tab_content:function(e){return'<div id="tab-content-'+e.id+'" class="tab-pane"/>'}});return{View:t}}),define("plugin/library/ui-table",["utils/utils"],function(e){var t=Backbone.View.extend({row:null,row_count:0,optionsDefault:{content:"No content available.",onchange:null,ondblclick:null,onconfirm:null,cls:""},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(t){this.options=e.merge(t,this.optionsDefault);var n=$(this._template(t));this.$thead=n.find("thead"),this.$tbody=n.find("tbody"),this.$tmessage=n.find("tmessage"),this.setElement(n),this.row=$("<tr></tr>")},addHeader:function(e){var t=$("<th></th>");t.append(e),this.row.append(t)},appendHeader:function(){this.$thead.append(this.row),this.row=$("<tr></tr>")},add:function(e,t,n){var r=$("<td></td>");t&&r.css("width",t),n&&r.css("text-align",n),r.append(e),this.row.append(r)},append:function(e){this._commit(e)},prepend:function(e){this._commit(e,!0)},get:function(e){return this.$el.find("#"+e)},del:function(e){var t=this.$tbody.find("#"+e);t.length>0&&(t.remove(),this.row_count--,this._refresh())},delAll:function(){this.$tbody.html(""),this.row_count=0,this._refresh()},value:function(e){this.before=this.$tbody.find(".current").attr("id"),e!==undefined&&(this.$tbody.find("tr").removeClass("current"),e&&this.$tbody.find("#"+e).addClass("current"));var t=this.$tbody.find(".current").attr("id");return t===undefined?null:(t!=this.before&&this.options.onchange&&this.options.onchange(e),t)},size:function(){return this.$tbody.find("tr").length},_commit:function(e,t){this.del(e),this.row.attr("id",e),t?this.$tbody.prepend(this.row):this.$tbody.append(this.row),this.row=$("<tr></tr>"),this.row_count++,this._refresh()},_onclick:function(e){var t=this.value(),n=$(e.target).closest("tr").attr("id");n!=""&&n&&t!=n&&(this.options.onconfirm?this.options.onconfirm(n):this.value(n))},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_refresh:function(){this.row_count==0?this.$tmessage.show():this.$tmessage.hide()},_template:function(e){return'<div><table class="ui-table '+e.cls+'">'+"<thead></thead>"+'<tbody style="cursor: pointer;"></tbody>'+"</table>"+"<tmessage>"+e.content+"</tmessage>"+"<div>"}});return{View:t}}),define("plugin/views/group",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(r,i){this.app=r;var s=this;this.chart=this.app.chart,this.group=i.group,this.group_key=new t.Input({placeholder:"Data label",onchange:function(e){s.group.set("key",e)}}),this.table=new e.View({content:"No data column."});var o=$("<div/>");o.append(n.wrap((new t.Label({title:"Provide a label:"})).$el)),o.append(n.wrap(this.group_key.$el)),o.append(n.wrap((new t.Label({title:"Select columns:"})).$el)),o.append(n.wrap(this.table.$el)),this.setElement(o);var s=this;this.chart.on("change:dataset_id",function(){s._refreshTable()}),this.chart.on("change:type",function(){s._refreshTable()}),this.group.on("change:key",function(){s._refreshGroupKey()}),this.group.on("change",function(){s._refreshGroup()}),this._refreshTable(),this._refreshGroupKey(),this._refreshGroup()},_refreshTable:function(){var e=this.chart.get("dataset_id"),n=this.chart.get("type");if(!e||!n)return;var r=this,i=this.chart.definition;this.table.delAll();var s={};for(var o in i.columns){var u=i.columns[o];if(!u){console.debug("Group::_refreshTable() - Skipping column definition.");continue}var a=new t.Select.View({id:"select_"+o,wait:!0});this.table.add(u.title,"25%"),this.table.add(a.$el),this.table.append(o),s[o]=a}this.chart.state("wait","Loading metadata...");var f=this.chart.deferred.register();this.app.datasets.request({id:e},function(e){for(var t in s)r._addRow(t,e,s,i.columns[t]);r.chart.state("ok","Metadata initialized..."),r.chart.deferred.done(f)})},_addRow:function(e,t,n,r){var i=this,s=r.is_label,o=r.is_auto,u=r.is_numeric,a=[],f=n[e];o&&a.push({label:"Column: Row Number",value:"auto"});var l=t.metadata_column_types;for(var c in l){var h=!1;l[c]=="int"||l[c]=="float"?h=u:h=s,h&&a.push({label:"Column: "+(parseInt(c)+1)+" ["+l[c]+"]",value:c})}f.update(a);if(!f.exists(this.group.get(e))){var p=f.first();console.debug('Group()::_addRow() - Switching model value from "'+this.group.get(e)+'" to "'+p+'".'),this.group.set(e,p)}f.value(this.group.get(e)),f.setOnChange(function(t){i.group.set(e,t),i.chart.set("modified",!0)}),f.show()},_refreshGroup:function(){this.group.set("date",n.time())},_refreshGroupKey:function(){var e=this.group.get("key");e===undefined&&(e=""),this.group_key.value(e)}})}),define("plugin/library/ui-table-form",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{title:"",content:"",mode:""},list:[],initialize:function(r,i){this.app=r,this.options=n.merge(i,this.optionsDefault),this.table_title=new t.Label({title:this.options.title}),this.table=new e.View({content:this.options.content});var s=$('<div class="ui-table-form"/>');this.options.title&&s.append(n.wrap(this.table_title.$el)),s.append(n.wrap(this.table.$el)),this.setElement(s)},title:function(e){this.table_title.title(e)},update:function(e,t){this.table.delAll(),this.list=[];for(var n in e)this._add(e[n].id||n,e[n],t);for(var n in this.list)this.list[n].trigger("change")},_add:function(e,n,r){var i=this,s=null,o=n.type;switch(o){case"text":s=new t.Input({id:"field-"+e,placeholder:n.placeholder,value:r.get(e),onchange:function(t){r.set(e,t)}});break;case"radiobutton":s=new t.RadioButton({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"select":s=new t.Select.View({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"dataset":s=new t.Select.View({id:"field-"+e,onchange:function(t){r.set(e,t)}}),i.app.datasets.on("all",function(){var t=[];i.app.datasets.each(function(e){e.get("datatype_id")==n.data&&t.push({value:e.get("id"),label:e.get("name")})}),s.update(t),r.get(e)||r.set(e,s.first()),s.value(r.get(e))}),i.app.datasets.trigger("all.datasets");break;case"textarea":s=new t.Textarea({id:"field-"+e,onchange:function(){r.set(e,s.value())}});break;case"separator":s=$("<div/>");break;default:s=new t.Input({id:"field-"+e,placeholder:n.placeholder,type:n.type,onchange:function(){r.set(e,s.value())}})}if(o!="separator"){r.get(e)||r.set(e,n.init),s.value(r.get(e)),this.list[e]=s;var u=$("<div/>");u.append(s.$el),n.info&&u.append('<div class="ui-table-form-info">'+n.info+"</div>"),this.options.style=="bold"?(this.table.add((new t.Label({title:n.title,cls:"form-label"})).$el),this.table.add(u)):(this.table.add('<span class="ui-table-form-title">'+n.title+"</span>","25%"),this.table.add(u))}else this.table.add('<div class="ui-table-form-separator">'+n.title+":<div/>"),this.table.add($("<div/>"));this.table.append(e)}});return{View:r}}),define("plugin/views/settings",["plugin/library/ui","plugin/library/ui-table-form","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(e,n){this.app=e;var r=this;this.chart=this.app.chart,this.form=new t.View({title:"Chart options:",content:"This chart type does not provide any options."}),this.setElement(this.form.$el);var r=this;this.chart.on("change",function(){r._refresh()})},_refresh:function(){var e=this.chart.definition;if(!e)return;this.form.title(e.category+" - "+e.title+":"),this.form.update(e.settings,this.chart.settings)}})}),define("plugin/views/types",["utils/utils","plugin/library/ui"],function(e,t){return Backbone.View.extend({optionsDefault:{onchange:null,ondblclick:null},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(n,r){var i=this;this.app=n,this.options=e.merge(r,this.optionsDefault);var s=$('<div class="charts-grid"/>');s.append(e.wrap((new t.Label({title:"How many data points would you like to analyze?"})).$el)),this.library=new t.RadioButton({data:[{label:"Few (<1k)",value:"small"},{label:"Some (<10k)",value:"medium"},{label:"Many (>10k)",value:"large"}],onchange:function(e){i._filter(e)}}),s.append(e.wrap(this.library.$el)),this.setElement(s),this._render(),this.library.value("small")},value:function(e){var t=this.$el.find(".current").attr("id");e!==undefined&&(this.$el.find(".current").removeClass("current"),this.$el.find("#"+e).addClass("current"));var n=this.$el.find(".current").attr("id");return n===undefined?null:(n!=t&&this.options.onchange&&this.options.onchange(e),n)},_filter:function(e){this.$el.find(".header").hide();var t=this.app.types.attributes;for(var n in t){var r=t[n],i=this.$el.find("#"+n),s=this.$el.find("#types-header-"+this.categories_index[r.category]),o=r.keywords||"";o.indexOf(e)>=0?(i.show(),s.show()):i.hide()}},_render:function(){this.categories={},this.categories_index={};var t=0,n=this.app.types.attributes;for(var r in n){var i=n[r],s=i.category;this.categories[s]||(this.categories[s]={},this.categories_index[s]=t++),this.categories[s][r]=i}for(var s in this.categories){var o=$('<div style="clear: both;"/>');o.append(e.wrap(this._template_header({id:"types-header-"+this.categories_index[s],title:s})));for(var r in this.categories[s]){var i=this.categories[s][r];o.append(e.wrap(this._template_item({id:r,title:i.title+" ("+i.library+")",url:config.app_root+"charts/"+this.app.chartPath(r)+"/logo.png"})))}this.$el.append(e.wrap(o))}},_onclick:function(e){var t=this.value(),n=$(e.target).closest(".item").attr("id");n!=""&&n&&t!=n&&this.value(n)},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_template_header:function(e){return'<div id="'+e.id+'" class="header">'+"• "+e.title+"<div>"},_template_item:function(e){return'<div id="'+e.id+'" class="item">'+'<img class="image" src="'+e.url+'">'+'<div class="title">'+e.title+"</div>"+"<div>"}})}),define("plugin/views/editor",["mvc/ui/ui-tabs","plugin/library/ui","mvc/ui/ui-portlet","utils/utils","plugin/models/chart","plugin/models/group","plugin/views/group","plugin/views/settings","plugin/views/types"],function(e,t,n,r,i,s,o,u,a){return Backbone.View.extend({optionsDefault:{header:!0,content:"No content available."},initialize:function(i,s){var o=this;this.app=i,this.chart=this.app.chart,this.options=r.merge(s,this.optionsDefault),this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Editor",operations:{save:new t.ButtonIcon({icon:"fa-save",tooltip:"Draw Chart",title:"Draw",onclick:function(){o._saveChart()}}),back:new t.ButtonIcon({icon:"fa-caret-left",tooltip:"Return to Viewer",title:"Cancel",onclick:function(){o.app.go("viewer"),o.app.storage.load()}})}}),this.types=new a(i,{onchange:function(e){var t=o.app.types.get(e);t||console.debug("FAILED - Editor::onchange() - Chart type not supported."),o.chart.definition=t,o.chart.settings.clear(),o.chart.set({type:e}),o.chart.set("modified",!0),console.debug("Editor::onchange() - Switched chart type.")},ondblclick:function(e){o._saveChart()}}),this.tabs=new e.View({title_new:"Add Data",onnew:function(){var e=o._addGroupModel();o.tabs.show(e.id)}}),this.title=new t.Input({placeholder:"Chart title",onchange:function(){o.chart.set("title",o.title.value())}});var f=$("<div/>");f.append(r.wrap((new t.Label({title:"Provide a chart title:"})).$el)),f.append(r.wrap(this.title.$el)),f.append(r.wrap(this.types.$el)),this.tabs.add({id:"main",title:"Start",$el:f}),this.settings=new u(this.app),this.tabs.add({id:"settings",title:"Configuration",$el:this.settings.$el}),this.portlet.append(this.message.$el),this.portlet.append(this.tabs.$el),this.setElement(this.portlet.$el),this.tabs.hideOperation("back");var o=this;this.chart.on("change:title",function(e){o._refreshTitle()}),this.chart.on("change:type",function(e){o.types.value(e.get("type"))}),this.chart.on("reset",function(e){o._resetChart()}),this.app.chart.on("redraw",function(e){o.portlet.showOperation("back")}),this.app.chart.groups.on("add",function(e){o._addGroup(e)}),this.app.chart.groups.on("remove",function(e){o._removeGroup(e)}),this.app.chart.groups.on("reset",function(e){o._removeAllGroups()}),this.app.chart.groups.on("change:key",function(e){o._refreshGroupKey()}),this._resetChart()},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e),this.title.value(e)},_refreshGroupKey:function(){var e=this,t=0;this.chart.groups.each(function(n){var r=n.get("key","");r==""&&(r="Chart data"),e.tabs.title(n.id,++t+": "+r)})},_addGroupModel:function(){var e=new s({id:r.uuid()});return this.chart.groups.add(e),e},_addGroup:function(e){var t=this,n=new o(this.app,{group:e});this.tabs.add({id:e.id,$el:n.$el,ondel:function(){t.chart.groups.remove(e.id)}}),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeGroup:function(e){this.tabs.del(e.id),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeAllGroups:function(e){this.tabs.delRemovable()},_resetChart:function(){this.chart.set("id",r.uuid()),this.chart.set("type","highcharts_bar"),this.chart.set("dataset_id",this.app.options.config.dataset_id),this.chart.set("title","New Chart"),this.portlet.hideOperation("back")},_saveChart:function(){this.chart.set({type:this.types.value(),title:this.title.value(),date:r.time()});if(this.chart.groups.length==0){this.message.update({message:"Please select data columns before drawing the chart."});var e=this._addGroupModel();this.tabs.show(e.id);return}var t=this,n=!0,i=this.chart.definition;this.chart.groups.each(function(e){if(!n)return;for(var r in i.columns)if(e.attributes[r]=="null"){t.message.update({status:"danger",message:"This chart type requires column types not found in your tabular file."}),t.tabs.show(e.id),n=!1;return}});if(!n)return;this.app.go("viewer");var t=this;this.chart.deferred.execute(function(){t.app.storage.save(),t.chart.trigger("redraw")})}})}),define("plugin/models/config",[],function(){return Backbone.Model.extend({defaults:{query_limit:500,query_timeout:100,screenshot_url:"http://export.highcharts.com/"}})}),function(){function t(e,t){return(new Date(t,e+1,0)).getDate()}function n(e,t,n){return function(r,i,s){var o=e(r),u=[];o<r&&t(o);if(s>1)while(o<i){var a=new Date(+o);n(a)%s===0&&u.push(a),t(o)}else while(o<i)u.push(new Date(+o)),t(o);return u}}var e=window.nv||{};e.version="1.1.15b",e.dev=!0,window.nv=e,e.tooltip=e.tooltip||{},e.utils=e.utils||{},e.models=e.models||{},e.charts={},e.graphs=[],e.logs={},e.dispatch=d3.dispatch("render_start","render_end"),e.dev&&(e.dispatch.on("render_start",function(t){e.logs.startTime=+(new Date)}),e.dispatch.on("render_end",function(t){e.logs.endTime=+(new Date),e.logs.totalTime=e.logs.endTime-e.logs.startTime,e.log("total",e.logs.totalTime)})),e.log=function(){if(e.dev&&console.log&&console.log.apply)console.log.apply(console,arguments);else if(e.dev&&typeof console.log=="function"&&Function.prototype.bind){var t=Function.prototype.bind.call(console.log,console);t.apply(console,arguments)}return arguments[arguments.length-1]},e.render=function(n){n=n||1,e.render.active=!0,e.dispatch.render_start(),setTimeout(function(){var t,r;for(var i=0;i<n&&(r=e.render.queue[i]);i++)t=r.generate(),typeof r.callback==typeof Function&&r.callback(t),e.graphs.push(t);e.render.queue.splice(0,i),e.render.queue.length?setTimeout(arguments.callee,0):(e.dispatch.render_end(),e.render.active=!1)},0)},e.render.active=!1,e.render.queue=[],e.addGraph=function(t){typeof arguments[0]==typeof Function&&(t={generate:arguments[0],callback:arguments[1]}),e.render.queue.push(t),e.render.active||e.render()},e.identity=function(e){return e},e.strip=function(e){return e.replace(/(\s|&)/g,"")},d3.time.monthEnd=function(e){return new Date(e.getFullYear(),e.getMonth(),0)},d3.time.monthEnds=n(d3.time.monthEnd,function(e){e.setUTCDate(e.getUTCDate()+1),e.setDate(t(e.getMonth()+1,e.getFullYear()))},function(e){return e.getMonth()}),e.interactiveGuideline=function(){function c(o){o.each(function(o){function g(){var e=d3.mouse(this),n=e[0],r=e[1],o=!0,a=!1;l&&(n=d3.event.offsetX,r=d3.event.offsetY,d3.event.target.tagName!=="svg"&&(o=!1),d3.event.target.className.baseVal.match("nv-legend")&&(a=!0)),o&&(n-=i.left,r-=i.top);if(n<0||r<0||n>p||r>d||d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined||a){if(l&&d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined&&d3.event.relatedTarget.className.match(t.nvPointerEventsClass))return;u.elementMouseout({mouseX:n,mouseY:r}),c.renderGuideLine(null);return}var f=s.invert(n);u.elementMousemove({mouseX:n,mouseY:r,pointXValue:f}),d3.event.type==="dblclick"&&u.elementDblclick({mouseX:n,mouseY:r,pointXValue:f})}var h=d3.select(this),p=n||960,d=r||400,v=h.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([o]),m=v.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");m.append("g").attr("class","nv-interactiveGuideLine");if(!f)return;f.on("mousemove",g,!0).on("mouseout",g,!0).on("dblclick",g),c.renderGuideLine=function(t){if(!a)return;var n=v.select(".nv-interactiveGuideLine").selectAll("line").data(t!=null?[e.utils.NaNtoZero(t)]:[],String);n.enter().append("line").attr("class","nv-guideline").attr("x1",function(e){return e}).attr("x2",function(e){return e}).attr("y1",d).attr("y2",0),n.exit().remove()}})}var t=e.models.tooltip(),n=null,r=null,i={left:0,top:0},s=d3.scale.linear(),o=d3.scale.linear(),u=d3.dispatch("elementMousemove","elementMouseout","elementDblclick"),a=!0,f=null,l=navigator.userAgent.indexOf("MSIE")!==-1;return c.dispatch=u,c.tooltip=t,c.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.left=typeof e.left!="undefined"?e.left:i.left,c):i},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.xScale=function(e){return arguments.length?(s=e,c):s},c.showGuideLine=function(e){return arguments.length?(a=e,c):a},c.svgContainer=function(e){return arguments.length?(f=e,c):f},c},e.interactiveBisect=function(e,t,n){if(!e instanceof Array)return null;typeof n!="function"&&(n=function(e,t){return e.x});var r=d3.bisector(n).left,i=d3.max([0,r(e,t)-1]),s=n(e[i],i);typeof s=="undefined"&&(s=i);if(s===t)return i;var o=d3.min([i+1,e.length-1]),u=n(e[o],o);return typeof u=="undefined"&&(u=o),Math.abs(u-t)>=Math.abs(s-t)?i:o},e.nearestValueIndex=function(e,t,n){var r=Infinity,i=null;return e.forEach(function(e,s){var o=Math.abs(t-e);o<=r&&o<n&&(r=o,i=s)}),i},function(){window.nv.tooltip={},window.nv.models.tooltip=function(){function y(){if(a){var e=d3.select(a);e.node().tagName!=="svg"&&(e=e.select("svg"));var t=e.node()?e.attr("viewBox"):null;if(t){t=t.split(" ");var n=parseInt(e.style("width"))/t[2];l.left=l.left*n,l.top=l.top*n}}}function b(e){var t;a?t=d3.select(a):t=d3.select("body");var n=t.select(".nvtooltip");return n.node()===null&&(n=t.append("div").attr("class","nvtooltip "+(u?u:"xy-tooltip")).attr("id",h)),n.node().innerHTML=e,n.style("top",0).style("left",0).style("opacity",0),n.selectAll("div, table, td, tr").classed(p,!0),n.classed(p,!0),n.node()}function w(){if(!c)return;if(!g(n))return;y();var t=l.left,u=o!=null?o:l.top,h=b(m(n));f=h;if(a){var p=a.getElementsByTagName("svg")[0],d=p?p.getBoundingClientRect():a.getBoundingClientRect(),v={left:0,top:0};if(p){var E=p.getBoundingClientRect(),S=a.getBoundingClientRect(),x=E.top;if(x<0){var T=a.getBoundingClientRect();x=Math.abs(x)>T.height?0:x}v.top=Math.abs(x-S.top),v.left=Math.abs(E.left-S.left)}t+=a.offsetLeft+v.left-2*a.scrollLeft,u+=a.offsetTop+v.top-2*a.scrollTop}return s&&s>0&&(u=Math.floor(u/s)*s),e.tooltip.calcTooltipPosition([t,u],r,i,h),w}var t=null,n=null,r="w",i=50,s=25,o=null,u=null,a=null,f=null,l={left:null,top:null},c=!0,h="nvtooltip-"+Math.floor(Math.random()*1e5),p="nv-pointer-events-none",d=function(e,t){return e},v=function(e){return e},m=function(e){if(t!=null)return t;if(e==null)return"";var n=d3.select(document.createElement("table")),r=n.selectAll("thead").data([e]).enter().append("thead");r.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(v(e.value));var i=n.selectAll("tbody").data([e]).enter().append("tbody"),s=i.selectAll("tr").data(function(e){return e.series}).enter().append("tr").classed("highlight",function(e){return e.highlight});s.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(e){return e.color}),s.append("td").classed("key",!0).html(function(e){return e.key}),s.append("td").classed("value",!0).html(function(e,t){return d(e.value,t)}),s.selectAll("td").each(function(e){if(e.highlight){var t=d3.scale.linear().domain([0,1]).range(["#fff",e.color]),n=.6;d3.select(this).style("border-bottom-color",t(n)).style("border-top-color",t(n))}});var o=n.node().outerHTML;return e.footer!==undefined&&(o+="<div class='footer'>"+e.footer+"</div>"),o},g=function(e){return e&&e.series&&e.series.length>0?!0:!1};return w.nvPointerEventsClass=p,w.content=function(e){return arguments.length?(t=e,w):t},w.tooltipElem=function(){return f},w.contentGenerator=function(e){return arguments.length?(typeof e=="function"&&(m=e),w):m},w.data=function(e){return arguments.length?(n=e,w):n},w.gravity=function(e){return arguments.length?(r=e,w):r},w.distance=function(e){return arguments.length?(i=e,w):i},w.snapDistance=function(e){return arguments.length?(s=e,w):s},w.classes=function(e){return arguments.length?(u=e,w):u},w.chartContainer=function(e){return arguments.length?(a=e,w):a},w.position=function(e){return arguments.length?(l.left=typeof e.left!="undefined"?e.left:l.left,l.top=typeof e.top!="undefined"?e.top:l.top,w):l},w.fixedTop=function(e){return arguments.length?(o=e,w):o},w.enabled=function(e){return arguments.length?(c=e,w):c},w.valueFormatter=function(e){return arguments.length?(typeof e=="function"&&(d=e),w):d},w.headerFormatter=function(e){return arguments.length?(typeof e=="function"&&(v=e),w):v},w.id=function(){return h},w},e.tooltip.show=function(t,n,r,i,s,o){var u=document.createElement("div");u.className="nvtooltip "+(o?o:"xy-tooltip");var a=s;if(!s||s.tagName.match(/g|svg/i))a=document.getElementsByTagName("body")[0];u.style.left=0,u.style.top=0,u.style.opacity=0,u.innerHTML=n,a.appendChild(u),s&&(t[0]=t[0]-s.scrollLeft,t[1]=t[1]-s.scrollTop),e.tooltip.calcTooltipPosition(t,r,i,u)},e.tooltip.findFirstNonSVGParent=function(e){while(e.tagName.match(/^g|svg$/i)!==null)e=e.parentNode;return e},e.tooltip.findTotalOffsetTop=function(e,t){var n=t;do isNaN(e.offsetTop)||(n+=e.offsetTop);while(e=e.offsetParent);return n},e.tooltip.findTotalOffsetLeft=function(e,t){var n=t;do isNaN(e.offsetLeft)||(n+=e.offsetLeft);while(e=e.offsetParent);return n},e.tooltip.calcTooltipPosition=function(t,n,r,i){var s=parseInt(i.offsetHeight),o=parseInt(i.offsetWidth),u=e.utils.windowSize().width,a=e.utils.windowSize().height,f=window.pageYOffset,l=window.pageXOffset,c,h;a=window.innerWidth>=document.body.scrollWidth?a:a-16,u=window.innerHeight>=document.body.scrollHeight?u:u-16,n=n||"s",r=r||20;var p=function(t){return e.tooltip.findTotalOffsetTop(t,h)},d=function(t){return e.tooltip.findTotalOffsetLeft(t,c)};switch(n){case"e":c=t[0]-o-r,h=t[1]-s/2;var v=d(i),m=p(i);v<l&&(c=t[0]+r>l?t[0]+r:l-v+c),m<f&&(h=f-m+h),m+s>f+a&&(h=f+a-m+h-s);break;case"w":c=t[0]+r,h=t[1]-s/2;var v=d(i),m=p(i);v+o>u&&(c=t[0]-o-r),m<f&&(h=f+5),m+s>f+a&&(h=f+a-m+h-s);break;case"n":c=t[0]-o/2-5,h=t[1]+r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),m+s>f+a&&(h=f+a-m+h-s);break;case"s":c=t[0]-o/2,h=t[1]-s-r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),f>m&&(h=f);break;case"none":c=t[0],h=t[1]-r;var v=d(i),m=p(i)}return i.style.left=c+"px",i.style.top=h+"px",i.style.opacity=1,i.style.position="absolute",i},e.tooltip.cleanup=function(){var e=document.getElementsByClassName("nvtooltip"),t=[];while(e.length)t.push(e[0]),e[0].style.transitionDelay="0 !important",e[0].style.opacity=0,e[0].className="nvtooltip-pending-removal";setTimeout(function(){while(t.length){var e=t.pop();e.parentNode.removeChild(e)}},500)}}(),e.utils.windowSize=function(){var e={width:640,height:480};return document.body&&document.body.offsetWidth&&(e.width=document.body.offsetWidth,e.height=document.body.offsetHeight),document.compatMode=="CSS1Compat"&&document.documentElement&&document.documentElement.offsetWidth&&(e.width=document.documentElement.offsetWidth,e.height=document.documentElement.offsetHeight),window.innerWidth&&window.innerHeight&&(e.width=window.innerWidth,e.height=window.innerHeight),e},e.utils.windowResize=function(e){if(e===undefined)return;var t=window.onresize;window.onresize=function(n){typeof t=="function"&&t(n),e(n)}},e.utils.getColor=function(t){return arguments.length?Object.prototype.toString.call(t)==="[object Array]"?function(e,n){return e.color||t[n%t.length]}:t:e.utils.defaultColor()},e.utils.defaultColor=function(){var e=d3.scale.category20().range();return function(t,n){return t.color||e[n%e.length]}},e.utils.customTheme=function(e,t,n){t=t||function(e){return e.key},n=n||d3.scale.category20().range();var r=n.length;return function(i,s){var o=t(i);return r||(r=n.length),typeof e[o]!="undefined"?typeof e[o]=="function"?e[o]():e[o]:n[--r]}},e.utils.pjax=function(t,n){function r(r){d3.html(r,function(r){var i=d3.select(n).node();i.parentNode.replaceChild(d3.select(r).select(n).node(),i),e.utils.pjax(t,n)})}d3.selectAll(t).on("click",function(){history.pushState(this.href,this.textContent,this.href),r(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&r(d3.event.state)})},e.utils.calcApproxTextWidth=function(e){if(typeof e.style=="function"&&typeof e.text=="function"){var t=parseInt(e.style("font-size").replace("px","")),n=e.text().length;return n*t*.5}return 0},e.utils.NaNtoZero=function(e){return typeof e!="number"||isNaN(e)||e===null||e===Infinity?0:e},e.utils.optionsFunc=function(e){return e&&d3.map(e).forEach(function(e,t){typeof this[e]=="function"&&this[e](t)}.bind(this)),this},e.models.axis=function(){function m(e){return e.each(function(e){var i=d3.select(this),m=i.selectAll("g.nv-wrap.nv-axis").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),y=g.append("g"),b=m.select("g");p!==null?t.ticks(p):(t.orient()=="top"||t.orient()=="bottom")&&t.ticks(Math.abs(s.range()[1]-s.range()[0])/100),b.call(t),v=v||t.scale();var w=t.tickFormat();w==null&&(w=v.tickFormat());var E=b.selectAll("text.nv-axislabel").data([o||null]);E.exit().remove();switch(t.orient()){case"top":E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",0).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+s(e)+",0)"}).select("text").attr("dy","-0.5em").attr("y",-t.tickPadding()).attr("text-anchor","middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+s.range()[t]+",0)"})}break;case"bottom":var T=36,N=30,C=b.selectAll("g").select("text");if(f%360){C.each(function(e,t){var n=this.getBBox().width;n>N&&(N=n)});var k=Math.abs(Math.sin(f*Math.PI/180)),T=(k?k*N:N)+30;C.attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f%360>0?"start":"end")}E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",T).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data([s.domain()[0],s.domain()[s.domain().length-1]]);x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",t.tickPadding()).attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f?f%360>0?"start":"end":"middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"})}c&&C.attr("transform",function(e,t){return"translate(0,"+(t%2==0?"0":"12")+")"});break;case"right":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"begin").attr("transform",l?"rotate(90)":"").attr("y",l?-Math.max(n.right,r)+12:-10).attr("x",l?s.range()[0]/2:t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+s(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",t.tickPadding()).style("text-anchor","start").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}break;case"left":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"end").attr("transform",l?"rotate(-90)":"").attr("y",l?-Math.max(n.left,r)+d:-10).attr("x",l?-s.range()[0]/2:-t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+v(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-t.tickPadding()).attr("text-anchor","end").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}}E.text(function(e){return e}),u&&(t.orient()==="left"||t.orient()==="right")&&(b.selectAll("g").each(function(e,t){d3.select(this).select("text").attr("opacity",1);if(s(e)<s.range()[1]+10||s(e)>s.range()[0]-10)(e>1e-10||e<-1e-10)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0)}),s.domain()[0]==s.domain()[1]&&s.domain()[0]==0&&m.selectAll("g.nv-axisMaxMin").style("opacity",function(e,t){return t?0:1}));if(u&&(t.orient()==="top"||t.orient()==="bottom")){var L=[];m.selectAll("g.nv-axisMaxMin").each(function(e,t){try{t?L.push(s(e)-this.getBBox().width-4):L.push(s(e)+this.getBBox().width+4)}catch(n){t?L.push(s(e)-4):L.push(s(e)+4)}}),b.selectAll("g").each(function(e,t){if(s(e)<L[0]||s(e)>L[1])e>1e-10||e<-1e-10?d3.select(this).remove():d3.select(this).select("text").remove()})}a&&b.selectAll(".tick").filter(function(e){return!parseFloat(Math.round(e.__data__*1e5)/1e6)&&e.__data__!==undefined}).classed("zero",!0),v=s.copy()}),m}var t=d3.svg.axis(),n={top:0,right:0,bottom:0,left:0},r=75,i=60,s=d3.scale.linear(),o=null,u=!0,a=!0,f=0,l=!0,c=!1,h=!1,p=null,d=12;t.scale(s).orient("bottom").tickFormat(function(e){return e});var v;return m.axis=t,d3.rebind(m,t,"orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"),d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.ticks=function(e){return arguments.length?(p=e,m):p},m.height=function(e){return arguments.length?(i=e,m):i},m.axisLabel=function(e){return arguments.length?(o=e,m):o},m.showMaxMin=function(e){return arguments.length?(u=e,m):u},m.highlightZero=function(e){return arguments.length?(a=e,m):a},m.scale=function(e){return arguments.length?(s=e,t.scale(s),h=typeof s.rangeBands=="function",d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m):s},m.rotateYLabel=function(e){return arguments.length?(l=e,m):l},m.rotateLabels=function(e){return arguments.length?(f=e,m):f},m.staggerLabels=function(e){return arguments.length?(c=e,m):c},m.axisLabelDistance=function(e){return arguments.length?(d=e,m):d},m},e.models.historicalBar=function(){function w(E){return E.each(function(w){var E=n-t.left-t.right,S=r-t.top-t.bottom,T=d3.select(this);s.domain(d||d3.extent(w[0].values.map(u).concat(f))),c?s.range(m||[E*.5/w[0].values.length,E*(w[0].values.length-.5)/w[0].values.length]):s.range(m||[0,E]),o.domain(v||d3.extent(w[0].values.map(a).concat(l))).range(g||[S,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=T.selectAll("g.nv-wrap.nv-historicalBar-"+i).data([w[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+i),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-bars"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){y.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",E).attr("height",S),A.attr("clip-path",h?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-bars").selectAll(".nv-bar").data(function(e){return e},function(e,t){return u(e,t)});O.exit().remove();var M=O.enter().append("rect").attr("x",0).attr("y",function(t,n){return e.utils.NaNtoZero(o(Math.max(0,a(t,n))))}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.abs(o(a(t,n))-o(0)))}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).on("mouseover",function(e,t){if(!b)return;d3.select(this).classed("hover",!0),y.elementMouseover({point:e,series:w[0],pos:[s(u(e,t)),o(a(e,t))],pointIndex:t,seriesIndex:0,e:d3.event})}).on("mouseout",function(e,t){if(!b)return;d3.select(this).classed("hover",!1),y.elementMouseout({point:e,series:w[0],pointIndex:t,seriesIndex:0,e:d3.event})}).on("click",function(e,t){if(!b)return;y.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){if(!b)return;y.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("fill",function(e,t){return p(e,t)}).attr("class",function(e,t,n){return(a(e,t)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+n+"-"+t}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).attr("width",E/w[0].values.length*.9),O.attr("y",function(t,n){var r=a(t,n)<0?o(0):o(0)-o(a(t,n))<1?o(0)-1:o(a(t,n));return e.utils.NaNtoZero(r)}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.max(Math.abs(o(a(t,n))-o(0)),1))})}),w}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[],l=[0],c=!1,h=!0,p=e.utils.defaultColor(),d,v,m,g,y=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),b=!0;return w.highlightPoint=function(e,t){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar-0-"+e).classed("hover",t)},w.clearHighlights=function(){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar.hover").classed("hover",!1)},w.dispatch=y,w.options=e.utils.optionsFunc.bind(w),w.x=function(e){return arguments.length?(u=e,w):u},w.y=function(e){return arguments.length?(a=e,w):a},w.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,w):t},w.width=function(e){return arguments.length?(n=e,w):n},w.height=function(e){return arguments.length?(r=e,w):r},w.xScale=function(e){return arguments.length?(s=e,w):s},w.yScale=function(e){return arguments.length?(o=e,w):o},w.xDomain=function(e){return arguments.length?(d=e,w):d},w.yDomain=function(e){return arguments.length?(v=e,w):v},w.xRange=function(e){return arguments.length?(m=e,w):m},w.yRange=function(e){return arguments.length?(g=e,w):g},w.forceX=function(e){return arguments.length?(f=e,w):f},w.forceY=function(e){return arguments.length?(l=e,w):l},w.padData=function(e){return arguments.length?(c=e,w):c},w.clipEdge=function(e){return arguments.length?(h=e,w):h},w.color=function(t){return arguments.length?(p=e.utils.getColor(t),w):p},w.id=function(e){return arguments.length?(i=e,w):i},w.interactive=function(e){return arguments.length?(b=!1,w):b},w},e.models.bullet=function(){function m(e){return e.each(function(e,n){var p=c-t.left-t.right,m=h-t.top-t.bottom,g=d3.select(this),y=i.call(this,e,n).slice().sort(d3.descending),b=s.call(this,e,n).slice().sort(d3.descending),w=o.call(this,e,n).slice().sort(d3.descending),E=u.call(this,e,n).slice(),S=a.call(this,e,n).slice(),x=f.call(this,e,n).slice(),T=d3.scale.linear().domain(d3.extent(d3.merge([l,y]))).range(r?[p,0]:[0,p]),N=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(T.range());this.__chart__=T;var C=d3.min(y),k=d3.max(y),L=y[1],A=g.selectAll("g.nv-wrap.nv-bullet").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),M=O.append("g"),_=A.select("g");M.append("rect").attr("class","nv-range nv-rangeMax"),M.append("rect").attr("class","nv-range nv-rangeAvg"),M.append("rect").attr("class","nv-range nv-rangeMin"),M.append("rect").attr("class","nv-measure"),M.append("path").attr("class","nv-markerTriangle"),A.attr("transform","translate("+t.left+","+t.top+")");var D=function(e){return Math.abs(N(e)-N(0))},P=function(e){return Math.abs(T(e)-T(0))},H=function(e){return e<0?N(e):N(0)},B=function(e){return e<0?T(e):T(0)};_.select("rect.nv-rangeMax").attr("height",m).attr("width",P(k>0?k:C)).attr("x",B(k>0?k:C)).datum(k>0?k:C),_.select("rect.nv-rangeAvg").attr("height",m).attr("width",P(L)).attr("x",B(L)).datum(L),_.select("rect.nv-rangeMin").attr("height",m).attr("width",P(k)).attr("x",B(k)).attr("width",P(k>0?C:k)).attr("x",B(k>0?C:k)).datum(k>0?C:k),_.select("rect.nv-measure").style("fill",d).attr("height",m/3).attr("y",m/3).attr("width",w<0?T(0)-T(w[0]):T(w[0])-T(0)).attr("x",B(w)).on("mouseover",function(){v.elementMouseover({value:w[0],label:x[0]||"Current",pos:[T(w[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:w[0],label:x[0]||"Current"})});var j=m/6;b[0]?_.selectAll("path.nv-markerTriangle").attr("transform",function(e){return"translate("+T(b[0])+","+m/2+")"}).attr("d","M0,"+j+"L"+j+","+ -j+" "+ -j+","+ -j+"Z").on("mouseover",function(){v.elementMouseover({value:b[0],label:S[0]||"Previous",pos:[T(b[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:b[0],label:S[0]||"Previous"})}):_.selectAll("path.nv-markerTriangle").remove(),A.selectAll(".nv-range").on("mouseover",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseover({value:e,label:n,pos:[T(e),m/2]})}).on("mouseout",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseout({value:e,label:n})})}),m}var t={top:0,right:0,bottom:0,left:0},n="left",r=!1,i=function(e){return e.ranges},s=function(e){return e.markers},o=function(e){return e.measures},u=function(e){return e.rangeLabels?e.rangeLabels:[]},a=function(e){return e.markerLabels?e.markerLabels:[]},f=function(e){return e.measureLabels?e.measureLabels:[]},l=[0],c=380,h=30,p=null,d=e.utils.getColor(["#1f77b4"]),v=d3.dispatch("elementMouseover","elementMouseout");return m.dispatch=v,m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(i=e,m):i},m.markers=function(e){return arguments.length?(s=e,m):s},m.measures=function(e){return arguments.length?(o=e,m):o},m.forceX=function(e){return arguments.length?(l=e,m):l},m.width=function(e){return arguments.length?(c=e,m):c},m.height=function(e){return arguments.length?(h=e,m):h},m.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,m):t},m.tickFormat=function(e){return arguments.length?(p=e,m):p},m.color=function(t){return arguments.length?(d=e.utils.getColor(t),m):d},m},e.models.bulletChart=function(){function m(e){return e.each(function(n,h){var g=d3.select(this),y=(a||parseInt(g.style("width"))||960)-i.left-i.right,b=f-i.top-i.bottom,w=this;m.update=function(){m(e)},m.container=this;if(!n||!s.call(this,n,h)){var E=g.selectAll(".nv-noData").data([p]);return E.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),E.attr("x",i.left+y/2).attr("y",18+i.top+b/2).text(function(e){return e}),m}g.selectAll(".nv-noData").remove();var S=s.call(this,n,h).slice().sort(d3.descending),x=o.call(this,n,h).slice().sort(d3.descending),T=u.call(this,n,h).slice().sort(d3.descending),N=g.selectAll("g.nv-wrap.nv-bulletChart").data([n]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-bulletWrap"),k.append("g").attr("class","nv-titles"),N.attr("transform","translate("+i.left+","+i.top+")");var A=d3.scale.linear().domain([0,Math.max(S[0],x[0],T[0])]).range(r?[y,0]:[0,y]),O=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(A.range());this.__chart__=A;var M=function(e){return Math.abs(O(e)-O(0))},_=function(e){return Math.abs(A(e)-A(0))},D=k.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(f-i.top-i.bottom)/2+")");D.append("text").attr("class","nv-title").text(function(e){return e.title}),D.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(e){return e.subtitle}),t.width(y).height(b);var P=L.select(".nv-bulletWrap");d3.transition(P).call(t);var H=l||A.tickFormat(y/100),B=L.selectAll("g.nv-tick").data(A.ticks(y/50),function(e){return this.textContent||H(e)}),j=B.enter().append("g").attr("class","nv-tick").attr("transform",function(e){return"translate("+O(e)+",0)"}).style("opacity",1e-6);j.append("line").attr("y1",b).attr("y2",b*7/6),j.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",b*7/6).text(H);var F=d3.transition(B).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1);F.select("line").attr("y1",b).attr("y2",b*7/6),F.select("text").attr("y",b*7/6),d3.transition(B.exit()).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1e-6).remove(),d.on("tooltipShow",function(e){e.key=n.title,c&&v(e,w.parentNode)})}),d3.timer.flush(),m}var t=e.models.bullet(),n="left",r=!1,i={top:5,right:40,bottom:20,left:120},s=function(e){return e.ranges},o=function(e){return e.markers},u=function(e){return e.measures},a=null,f=55,l=null,c=!0,h=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},p="No Data Available.",d=d3.dispatch("tooltipShow","tooltipHide"),v=function(t,n){var r=t.pos[0]+(n.offsetLeft||0)+i.left,s=t.pos[1]+(n.offsetTop||0)+i.top,o=h(t.key,t.label,t.value,t,m);e.tooltip.show([r,s],o,t.value<0?"e":"w",null,n)};return t.dispatch.on("elementMouseover.tooltip",function(e){d.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){d.tooltipHide(e)}),d.on("tooltipHide",function(){c&&e.tooltip.cleanup()}),m.dispatch=d,m.bullet=t,d3.rebind(m,t,"color"),m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(s=e,m):s},m.markers=function(e){return arguments.length?(o=e,m):o},m.measures=function(e){return arguments.length?(u=e,m):u},m.width=function(e){return arguments.length?(a=e,m):a},m.height=function(e){return arguments.length?(f=e,m):f},m.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,m):i},m.tickFormat=function(e){return arguments.length?(l=e,m):l},m.tooltips=function(e){return arguments.length?(c=e,m):c},m.tooltipContent=function(e){return arguments.length?(h=e,m):h},m.noData=function(e){return arguments.length?(p=e,m):p},m},e.models.cumulativeLineChart=function(){function D(b){return b.each(function(b){function I(e,t){d3.select(D.container).style("cursor","ew-resize")}function q(e,t){M.x=d3.event.x,M.i=Math.round(O.invert(M.x)),nt()}function R(e,t){d3.select(D.container).style("cursor","auto"),x.index=M.i,k.stateChange(x)}function nt(){tt.data([M]);var e=D.transitionDuration();D.transitionDuration(0),D.update(),D.transitionDuration(e)}var L=d3.select(this).classed("nv-chart-"+S,!0),A=this,H=(f||parseInt(L.style("width"))||960)-u.left-u.right,B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom;D.update=function(){L.call(D)},D.container=this,x.disabled=b.map(function(e){return!!e.disabled});if(!T){var j;T={};for(j in x)x[j]instanceof Array?T[j]=x[j].slice(0):T[j]=x[j]}var F=d3.behavior.drag().on("dragstart",I).on("drag",q).on("dragend",R);if(!b||!b.length||!b.filter(function(e){return e.values.length}).length){var U=L.selectAll(".nv-noData").data([N]);return U.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),U.attr("x",u.left+H/2).attr("y",u.top+B/2).text(function(e){return e}),D}L.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();if(!y){var z=b.filter(function(e){return!e.disabled}).map(function(e,n){var r=d3.extent(e.values,t.y());return r[0]<-0.95&&(r[0]=-0.95),[(r[0]-r[1])/(1+r[1]),(r[1]-r[0])/(1+r[0])]}),W=[d3.min(z,function(e){return e[0]}),d3.max(z,function(e){return e[1]})];t.yDomain(W)}else t.yDomain(null);O.domain([0,b[0].values.length-1]).range([0,H]).clamp(!0);var b=P(M.i,b),X=g?"none":"all",V=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([b]),$=V.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),J=V.select("g");$.append("g").attr("class","nv-interactive"),$.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),$.append("g").attr("class","nv-y nv-axis"),$.append("g").attr("class","nv-background"),$.append("g").attr("class","nv-linesWrap").style("pointer-events",X),$.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),$.append("g").attr("class","nv-legendWrap"),$.append("g").attr("class","nv-controlsWrap"),c&&(i.width(H),J.select(".nv-legendWrap").datum(b).call(i),u.top!=i.height()&&(u.top=i.height(),B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom),J.select(".nv-legendWrap").attr("transform","translate(0,"+ -u.top+")"));if(m){var K=[{key:"Re-scale y-axis",disabled:!y}];s.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),J.select(".nv-controlsWrap").datum(K).attr("transform","translate(0,"+ -u.top+")").call(s)}V.attr("transform","translate("+u.left+","+u.top+")"),d&&J.select(".nv-y.nv-axis").attr("transform","translate("+H+",0)");var Q=b.filter(function(e){return e.tempDisabled});V.select(".tempDisabled").remove(),Q.length&&V.append("text").attr("class","tempDisabled").attr("x",H/2).attr("y","-.71em").style("text-anchor","end").text(Q.map(function(e){return e.key}).join(", ")+" values cannot be calculated for this time period."),g&&(o.width(H).height(B).margin({left:u.left,top:u.top}).svgContainer(L).xScale(w),V.select(".nv-interactive").call(o)),$.select(".nv-background").append("rect"),J.select(".nv-background rect").attr("width",H).attr("height",B),t.y(function(e){return e.display.y}).width(H).height(B).color(b.map(function(e,t){return e.color||a(e,t)}).filter(function(e,t){return!b[t].disabled&&!b[t].tempDisabled}));var G=J.select(".nv-linesWrap").datum(b.filter(function(e){return!e.disabled&&!e.tempDisabled}));G.call(t),b.forEach(function(e,t){e.seriesIndex=t});var Y=b.filter(function(e){return!e.disabled&&!!C(e)}),Z=J.select(".nv-avgLinesWrap").selectAll("line").data(Y,function(e){return e.key}),et=function(e){var t=E(C(e));return t<0?0:t>B?B:t};Z.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(e,n){return t.color()(e,e.seriesIndex)}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.style("stroke-opacity",function(e){var t=E(C(e));return t<0||t>B?0:1}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.exit().remove();var tt=G.selectAll(".nv-indexLine").data([M]);tt.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(F),tt.attr("transform",function(e){return"translate("+O(e.i)+",0)"}).attr("height",B),h&&(n.scale(w).ticks(Math.min(b[0].values.length,H/70)).tickSize(-B,0),J.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),d3.transition(J.select(".nv-x.nv-axis")).call(n)),p&&(r.scale(E).ticks(B/36).tickSize(-H,0),d3.transition(J.select(".nv-y.nv-axis")).call(r)),J.select(".nv-background rect").on("click",function(){M.x=d3.mouse(this)[0],M.i=Math.round(O.invert(M.x)),x.index=M.i,k.stateChange(x),nt()}),t.dispatch.on("elementClick",function(e){M.i=e.pointIndex,M.x=O(M.i),x.index=M.i,k.stateChange(x),nt()}),s.dispatch.on("legendClick",function(e,t){e.disabled=!e.disabled,y=!e.disabled,x.rescaleY=y,k.stateChange(x),D.update()}),i.dispatch.on("stateChange",function(e){x.disabled=e.disabled,k.stateChange(x),D.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,f,l,c=[];b.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,D.x()),t.highlightPoint(r,f,!0);var o=n.values[f];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof l=="undefined"&&(l=D.xScale()(D.x()(o,f))),c.push({key:n.key,value:D.y()(o,f),color:a(n,n.seriesIndex)})});if(c.length>2){var h=D.yScale().invert(i.mouseY),p=Math.abs(D.yScale().domain()[0]-D.yScale().domain()[1]),d=.03*p,m=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);m!==null&&(c[m].highlight=!0)}var g=n.tickFormat()(D.x()(s,f),f);o.tooltip.position({left:l+u.left,top:i.mouseY+u.top}).chartContainer(A.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:g,series:c})(),o.renderGuideLine(l)}),o.dispatch.on("elementMouseout",function(e){k.tooltipHide(),t.clearHighlights()}),k.on("tooltipShow",function(e){v&&_(e,A.parentNode)}),k.on("changeState",function(e){typeof e.disabled!="undefined"&&(b.forEach(function(t,n){t.disabled=e.disabled[n]}),x.disabled=e.disabled),typeof e.index!="undefined"&&(M.i=e.index,M.x=O(M.i),x.index=e.index,tt.data([M])),typeof e.rescaleY!="undefined"&&(y=e.rescaleY),D.update()})}),D}function P(e,n){return n.map(function(n,r){if(!n.values)return n;var i=n.values[e];if(i==null)return n;var s=t.y()(i,e);return s<-0.95&&!A?(n.tempDisabled=!0,n):(n.tempDisabled=!1,n.values=n.values.map(function(e,n){return e.display={y:(t.y()(e,n)-s)/(1+s)},e}),n)})}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:30,bottom:50,left:60},a=e.utils.defaultColor(),f=null,l=null,c=!0,h=!0,p=!0,d=!1,v=!0,m=!0,g=!1,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},w,E,S=t.id(),x={index:0,rescaleY:y},T=null,N="No Data Available.",C=function(e){return e.average},k=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),L=0,A=!1;n.orient("bottom").tickPadding(7),r.orient(d?"right":"left"),s.updateState(!1);var O=d3.scale.linear(),M={i:0,x:0},_=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,D);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],k.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){k.tooltipHide(e)}),k.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),D.dispatch=k,D.lines=t,D.legend=i,D.xAxis=n,D.yAxis=r,D.interactiveLayer=o,d3.rebind(D,t,"defined","isArea","x","y","xScale","yScale","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id"),D.options=e.utils.optionsFunc.bind(D),D.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,D):u},D.width=function(e){return arguments.length?(f=e,D):f},D.height=function(e){return arguments.length?(l=e,D):l},D.color=function(t){return arguments.length?(a=e.utils.getColor(t),i.color(a),D):a},D.rescaleY=function(e){return arguments.length?(y=e,D):y},D.showControls=function(e){return arguments.length?(m=e,D):m},D.useInteractiveGuideline=function(e){return arguments.length?(g=e,e===!0&&(D.interactive(!1),D.useVoronoi(!1)),D):g},D.showLegend=function(e){return arguments.length?(c=e,D):c},D.showXAxis=function(e){return arguments.length?(h=e,D):h},D.showYAxis=function(e){return arguments.length?(p=e,D):p},D.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),D):d},D.tooltips=function(e){return arguments.length?(v=e,D):v},D.tooltipContent=function(e){return arguments.length?(b=e,D):b},D.state=function(e){return arguments.length?(x=e,D):x},D.defaultState=function(e){return arguments.length?(T=e,D):T},D.noData=function(e){return arguments.length?(N=e,D):N},D.average=function(e){return arguments.length?(C=e,D):C},D.transitionDuration=function(e){return arguments.length?(L=e,D):L},D.noErrorCheck=function(e){return arguments.length?(A=e,D):A},D},e.models.discreteBar=function(){function E(e){return e.each(function(e){var i=n-t.left-t.right,E=r-t.top-t.bottom,S=d3.select(this);e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var T=p&&d?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0}})});s.domain(p||d3.merge(T).map(function(e){return e.x})).rangeBands(v||[0,i],.1),o.domain(d||d3.extent(d3.merge(T).map(function(e){return e.y}).concat(f))),c?o.range(m||[E-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]):o.range(m||[E,0]),b=b||s,w=w||o.copy().range([o(0),o(0)]);var N=S.selectAll("g.nv-wrap.nv-discretebar").data([e]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-groups"),N.attr("transform","translate("+t.left+","+t.top+")");var A=N.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),A.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),A.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),A.style("stroke-opacity",1).style("fill-opacity",.75);var O=A.selectAll("g.nv-bar").data(function(e){return e.values});O.exit().remove();var M=O.enter().append("g").attr("transform",function(e,t,n){return"translate("+(s(u(e,t))+s.rangeBand()*.05)+", "+o(0)+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),g.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),g.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){g.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){g.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()});M.append("rect").attr("height",0).attr("width",s.rangeBand()*.9/e.length),c?(M.append("text").attr("text-anchor","middle"),O.select("text").text(function(e,t){return h(a(e,t))}).attr("x",s.rangeBand()*.9/2).attr("y",function(e,t){return a(e,t)<0?o(a(e,t))-o(0)+12:-4})):O.selectAll("text").remove(),O.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(e,t){return e.color||l(e,t)}).style("stroke",function(e,t){return e.color||l(e,t)}).select("rect").attr("class",y).attr("width",s.rangeBand()*.9/e.length),O.attr("transform",function(e,t){var n=s(u(e,t))+s.rangeBand()*.05,r=a(e,t)<0?o(0):o(0)-o(a(e,t))<1?o(0)-1:o(a(e,t));return"translate("+n+", "+r+")"}).select("rect").attr("height",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(d&&d[0]||0))||1)}),b=s.copy(),w=o.copy()}),E}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=!1,h=d3.format(",.2f"),p,d,v,m,g=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),y="discreteBar",b,w;return E.dispatch=g,E.options=e.utils.optionsFunc.bind(E),E.x=function(e){return arguments.length?(u=e,E):u},E.y=function(e){return arguments.length?(a=e,E):a},E.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,E):t},E.width=function(e){return arguments.length?(n=e,E):n},E.height=function(e){return arguments.length?(r=e,E):r},E.xScale=function(e){return arguments.length?(s=e,E):s},E.yScale=function(e){return arguments.length?(o=e,E):o},E.xDomain=function(e){return arguments.length?(p=e,E):p},E.yDomain=function(e){return arguments.length?(d=e,E):d},E.xRange=function(e){return arguments.length?(v=e,E):v},E.yRange=function(e){return arguments.length?(m=e,E):m},E.forceY=function(e){return arguments.length?(f=e,E):f},E.color=function(t){return arguments.length?(l=e.utils.getColor(t),E):l},E.id=function(e){return arguments.length?(i=e,E):i},E.showValues=function(e){return arguments.length?(c=e,E):c},E.valueFormat=function(e){return arguments.length?(h=e,E):h},E.rectClass=function(e){return arguments.length?(y=e,E):y},E},e.models.discreteBarChart=function(){function w(e){return e.each(function(e){var u=d3.select(this),p=this,y=(s||parseInt(u.style("width"))||960)-i.left-i.right,E=(o||parseInt(u.style("height"))||400)-i.top-i.bottom;w.update=function(){g.beforeUpdate(),u.call(w)},w.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var S=u.selectAll(".nv-noData").data([m]);return S.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),S.attr("x",i.left+y/2).attr("y",i.top+E/2).text(function(e){return e}),w}u.selectAll(".nv-noData").remove(),d=t.xScale(),v=t.yScale().clamp(!0);var T=u.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),C=N.append("defs"),k=T.select("g");N.append("g").attr("class","nv-x nv-axis"),N.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),N.append("g").attr("class","nv-barsWrap"),k.attr("transform","translate("+i.left+","+i.top+")"),l&&k.select(".nv-y.nv-axis").attr("transform","translate("+y+",0)"),t.width(y).height(E);var L=k.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));L.call(t),C.append("clipPath").attr("id","nv-x-label-clip-"+t.id()).append("rect"),k.select("#nv-x-label-clip-"+t.id()+" rect").attr("width",d.rangeBand()*(c?2:1)).attr("height",16).attr("x",-d.rangeBand()/(c?1:2));if(a){n.scale(d).ticks(y/100).tickSize(-E,0),k.select(".nv-x.nv-axis").attr("transform","translate(0,"+(v.range()[0]+(t.showValues()&&v.domain()[0]<0?16:0))+")"),k.select(".nv-x.nv-axis").call(n);var A=k.select(".nv-x.nv-axis").selectAll("g");c&&A.selectAll("text").attr("transform",function(e,t,n){return"translate(0,"+(n%2==0?"5":"17")+")"})}f&&(r.scale(v).ticks(E/36).tickSize(-y,0),k.select(".nv-y.nv-axis").call(r)),k.select(".nv-zeroLine line").attr("x1",0).attr("x2",y).attr("y1",v(0)).attr("y2",v(0)),g.on("tooltipShow",function(e){h&&b(e,p.parentNode)})}),w}var t=e.models.discreteBar(),n=e.models.axis(),r=e.models.axis(),i={top:15,right:10,bottom:50,left:60},s=null,o=null,u=e.utils.getColor(),a=!0,f=!0,l=!1,c=!1,h=!0,p=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},d,v,m="No Data Available.",g=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate"),y=0;n.orient("bottom").highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(l?"right":"left").tickFormat(d3.format(",.1f"));var b=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=p(i.series.key,a,f,i,w);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+i.left,e.pos[1]+i.top],g.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){g.tooltipHide(e)}),g.on("tooltipHide",function(){h&&e.tooltip.cleanup()}),w.dispatch=g,w.discretebar=t,w.xAxis=n,w.yAxis=r,d3.rebind(w,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","id","showValues","valueFormat"),w.options=e.utils.optionsFunc.bind(w),w.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,w):i},w.width=function(e){return arguments.length?(s=e,w):s},w.height=function(e){return arguments.length?(o=e,w):o},w.color=function(n){return arguments.length?(u=e.utils.getColor(n),t.color(u),w):u},w.showXAxis=function(e){return arguments.length?(a=e,w):a},w.showYAxis=function(e){return arguments.length?(f=e,w):f},w.rightAlignYAxis=function(e){return arguments.length?(l=e,r.orient(e?"right":"left"),w):l},w.staggerLabels=function(e){return arguments.length?(c=e,w):c},w.tooltips=function(e){return arguments.length?(h=e,w):h},w.tooltipContent=function(e){return arguments.length?(p=e,w):p},w.noData=function(e){return arguments.length?(m=e,w):m},w.transitionDuration=function(e){return arguments.length?(y=e,w):y},w},e.models.distribution=function(){function l(e){return e.each(function(e){var a=n-(i==="x"?t.left+t.right:t.top+t.bottom),l=i=="x"?"y":"x",c=d3.select(this);f=f||u;var h=c.selectAll("g.nv-distribution").data([e]),p=h.enter().append("g").attr("class","nvd3 nv-distribution"),d=p.append("g"),v=h.select("g");h.attr("transform","translate("+t.left+","+t.top+")");var m=v.selectAll("g.nv-dist").data(function(e){return e},function(e){return e.key});m.enter().append("g"),m.attr("class",function(e,t){return"nv-dist nv-series-"+t}).style("stroke",function(e,t){return o(e,t)});var g=m.selectAll("line.nv-dist"+i).data(function(e){return e.values});g.enter().append("line").attr(i+"1",function(e,t){return f(s(e,t))}).attr(i+"2",function(e,t){return f(s(e,t))}),m.exit().selectAll("line.nv-dist"+i).attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}).style("stroke-opacity",0).remove(),g.attr("class",function(e,t){return"nv-dist"+i+" nv-dist"+i+"-"+t}).attr(l+"1",0).attr(l+"2",r),g.attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}),f=u.copy()}),l}var t={top:0,right:0,bottom:0,left:0},n=400,r=8,i="x",s=function(e){return e[i]},o=e.utils.defaultColor(),u=d3.scale.linear(),a,f;return l.options=e.utils.optionsFunc.bind(l),l.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,l):t},l.width=function(e){return arguments.length?(n=e,l):n},l.axis=function(e){return arguments.length?(i=e,l):i},l.size=function(e){return arguments.length?(r=e,l):r},l.getData=function(e){return arguments.length?(s=d3.functor(e),l):s},l.scale=function(e){return arguments.length?(u=e,l):u},l.color=function(t){return arguments.length?(o=e.utils.getColor(t),l):o},l},e.models.historicalBarChart=function(){function x(e){return e.each(function(d){var E=d3.select(this),T=this,N=(u||parseInt(E.style("width"))||960)-s.left-s.right,C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom;x.update=function(){E.call(x)},x.container=this,g.disabled=d.map(function(e){return!!e.disabled});if(!y){var k;y={};for(k in g)g[k]instanceof Array?y[k]=g[k].slice(0):y[k]=g[k]}if(!d||!d.length||!d.filter(function(e){return e.values.length}).length){var L=E.selectAll(".nv-noData").data([b]);return L.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),L.attr("x",s.left+N/2).attr("y",s.top+C/2).text(function(e){return e}),x}E.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale();var A=E.selectAll("g.nv-wrap.nv-historicalBarChart").data([d]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),M=A.select("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-barsWrap"),O.append("g").attr("class","nv-legendWrap"),f&&(i.width(N),M.select(".nv-legendWrap").datum(d).call(i),s.top!=i.height()&&(s.top=i.height(),C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom),A.select(".nv-legendWrap").attr("transform","translate(0,"+ -s.top+")")),A.attr("transform","translate("+s.left+","+s.top+")"),h&&M.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)"),t.width(N).height(C).color(d.map(function(e,t){return e.color||o(e,t)}).filter(function(e,t){return!d[t].disabled}));var _=M.select(".nv-barsWrap").datum(d.filter(function(e){return!e.disabled}));_.call(t),l&&(n.scale(v).tickSize(-C,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+m.range()[0]+")"),M.select(".nv-x.nv-axis").call(n)),c&&(r.scale(m).ticks(C/36).tickSize(-N,0),M.select(".nv-y.nv-axis").call(r)),i.dispatch.on("legendClick",function(t,n){t.disabled=!t.disabled,d.filter(function(e){return!e.disabled}).length||d.map(function(e){return e.disabled=!1,A.selectAll(".nv-series").classed("disabled",!1),e}),g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),e.call(x)}),i.dispatch.on("legendDblclick",function(e){d.forEach(function(e){e.disabled=!0}),e.disabled=!1,g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),x.update()}),w.on("tooltipShow",function(e){p&&S(e,T.parentNode)}),w.on("changeState",function(e){typeof e.disabled!="undefined"&&(d.forEach(function(t,n){t.disabled=e.disabled[n]}),g.disabled=e.disabled),x.update()})}),x}var t=e.models.historicalBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s={top:30,right:90,bottom:50,left:90},o=e.utils.defaultColor(),u=null,a=null,f=!1,l=!0,c=!0,h=!1,p=!0,d=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},v,m,g={},y=null,b="No Data Available.",w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),E=0;n.orient("bottom").tickPadding(7),r.orient(h?"right":"left");var S=function(i,s){if(s){var o=d3.select(s).select("svg"),u=o.node()?o.attr("viewBox"):null;if(u){u=u.split(" ");var a=parseInt(o.style("width"))/u[2];i.pos[0]=i.pos[0]*a,i.pos[1]=i.pos[1]*a}}var f=i.pos[0]+(s.offsetLeft||0),l=i.pos[1]+(s.offsetTop||0),c=n.tickFormat()(t.x()(i.point,i.pointIndex)),h=r.tickFormat()(t.y()(i.point,i.pointIndex)),p=d(i.series.key,c,h,i,x);e.tooltip.show([f,l],p,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+s.left,e.pos[1]+s.top],w.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){w.tooltipHide(e)}),w.on("tooltipHide",function(){p&&e.tooltip.cleanup()}),x.dispatch=w,x.bars=t,x.legend=i,x.xAxis=n,x.yAxis=r,d3.rebind(x,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id","interpolate","highlightPoint","clearHighlights","interactive"),x.options=e.utils.optionsFunc.bind(x),x.margin=function(e){return arguments.length?(s.top=typeof e.top!="undefined"?e.top:s.top,s.right=typeof e.right!="undefined"?e.right:s.right,s.bottom=typeof e.bottom!="undefined"?e.bottom:s.bottom,s.left=typeof e.left!="undefined"?e.left:s.left,x):s},x.width=function(e){return arguments.length?(u=e,x):u},x.height=function(e){return arguments.length?(a=e,x):a},x.color=function(t){return arguments.length?(o=e.utils.getColor(t),i.color(o),x):o},x.showLegend=function(e){return arguments.length?(f=e,x):f},x.showXAxis=function(e){return arguments.length?(l=e,x):l},x.showYAxis=function(e){return arguments.length?(c=e,x):c},x.rightAlignYAxis=function(e){return arguments.length?(h=e,r.orient(e?"right":"left"),x):h},x.tooltips=function(e){return arguments.length?(p=e,x):p},x.tooltipContent=function(e){return arguments.length?(d=e,x):d},x.state=function(e){return arguments.length?(g=e,x):g},x.defaultState=function(e){return arguments.length?(y=e,x):y},x.noData=function(e){return arguments.length?(b=e,x):b},x.transitionDuration=function(e){return arguments.length?(E=e,x):E},x},e.models.indentedTree=function(){function g(e){return e.each(function(e){function k(e,t,n){d3.event.stopPropagation();if(d3.event.shiftKey&&!n)return d3.event.shiftKey=!1,e.values&&e.values.forEach(function(e){(e.values||e._values)&&k(e,0,!0)}),!0;if(!O(e))return!0;e.values?(e._values=e.values,e.values=null):(e.values=e._values,e._values=null),g.update()}function L(e){return e._values&&e._values.length?h:e.values&&e.values.length?p:""}function A(e){return e._values&&e._values.length}function O(e){var t=e.values||e._values;return t&&t.length}var t=1,n=d3.select(this),i=d3.layout.tree().children(function(e){return e.values}).size([r,f]);g.update=function(){n.call(g)},e[0]||(e[0]={key:a});var s=i.nodes(e[0]),y=d3.select(this).selectAll("div").data([[s]]),b=y.enter().append("div").attr("class","nvd3 nv-wrap nv-indentedtree"),w=b.append("table"),E=y.select("table").attr("width","100%").attr("class",c);if(o){var S=w.append("thead"),x=S.append("tr");l.forEach(function(e){x.append("th").attr("width",e.width?e.width:"10%").style("text-align",e.type=="numeric"?"right":"left").append("span").text(e.label)})}var T=E.selectAll("tbody").data(function(e){return e});T.enter().append("tbody"),t=d3.max(s,function(e){return e.depth}),i.size([r,t*f]);var N=T.selectAll("tr").data(function(e){return e.filter(function(e){return u&&!e.children?u(e):!0})},function(e,t){return e.id||e.id||++m});N.exit().remove(),N.select("img.nv-treeicon").attr("src",L).classed("folded",A);var C=N.enter().append("tr");l.forEach(function(e,t){var n=C.append("td").style("padding-left",function(e){return(t?0:e.depth*f+12+(L(e)?0:16))+"px"},"important").style("text-align",e.type=="numeric"?"right":"left");t==0&&n.append("img").classed("nv-treeicon",!0).classed("nv-folded",A).attr("src",L).style("width","14px").style("height","14px").style("padding","0 1px").style("display",function(e){return L(e)?"inline-block":"none"}).on("click",k),n.each(function(n){!t&&v(n)?d3.select(this).append("a").attr("href",v).attr("class",d3.functor(e.classes)).append("span"):d3.select(this).append("span"),d3.select(this).select("span").attr("class",d3.functor(e.classes)).text(function(t){return e.format?t[e.key]?e.format(t[e.key]):"-":t[e.key]||"-"})}),e.showCount&&(n.append("span").attr("class","nv-childrenCount"),N.selectAll("span.nv-childrenCount").text(function(e){return e.values&&e.values.length||e._values&&e._values.length?"("+(e.values&&e.values.filter(function(e){return u?u(e):!0}).length||e._values&&e._values.filter(function(e){return u?u(e):!0}).length||0)+")":""}))}),N.order().on("click",function(e){d.elementClick({row:this,data:e,pos:[e.x,e.y]})}).on("dblclick",function(e){d.elementDblclick({row:this,data:e,pos:[e.x,e.y]})}).on("mouseover",function(e){d.elementMouseover({row:this,data:e,pos:[e.x,e.y]})}).on("mouseout",function(e){d.elementMouseout({row:this,data:e,pos:[e.x,e.y]})})}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e4),o=!0,u=!1,a="No Data Available.",f=20,l=[{key:"key",label:"Name",type:"text"}],c=null,h="images/grey-plus.png",p="images/grey-minus.png",d=d3.dispatch("elementClick","elementDblclick","elementMouseover","elementMouseout"),v=function(e){return e.url},m=0;return g.options=e.utils.optionsFunc.bind(g),g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),scatter.color(i),g):i},g.id=function(e){return arguments.length?(s=e,g):s},g.header=function(e){return arguments.length?(o=e,g):o},g.noData=function(e){return arguments.length?(a=e,g):a},g.filterZero=function(e){return arguments.length?(u=e,g):u},g.columns=function(e){return arguments.length?(l=e,g):l},g.tableClass=function(e){return arguments.length?(c=e,g):c},g.iconOpen=function(e){return arguments.length?(h=e,g):h},g.iconClose=function(e){return arguments.length?(p=e,g):p},g.getUrl=function(e){return arguments.length?(v=e,g):v},g},e.models.legend=function(){function c(h){return h.each(function(c){var h=n-t.left-t.right,p=d3.select(this),d=p.selectAll("g.nv-legend").data([c]),v=d.enter().append("g").attr("class","nvd3 nv-legend").append("g"),m=d.select("g");d.attr("transform","translate("+t.left+","+t.top+")");var g=m.selectAll(".nv-series").data(function(e){return e}),y=g.enter().append("g").attr("class","nv-series").on("mouseover",function(e,t){l.legendMouseover(e,t)}).on("mouseout",function(e,t){l.legendMouseout(e,t)}).on("click",function(e,t){l.legendClick(e,t),a&&(f?(c.forEach(function(e){e.disabled=!0}),e.disabled=!1):(e.disabled=!e.disabled,c.every(function(e){return e.disabled})&&c.forEach(function(e){e.disabled=!1})),l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))}).on("dblclick",function(e,t){l.legendDblclick(e,t),a&&(c.forEach(function(e){e.disabled=!0}),e.disabled=!1,l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))});y.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),y.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8"),g.classed("disabled",function(e){return e.disabled}),g.exit().remove(),g.select("circle").style("fill",function(e,t){return e.color||s(e,t)}).style("stroke",function(e,t){return e.color||s(e,t)}),g.select("text").text(i);if(o){var b=[];g.each(function(t,n){var r=d3.select(this).select("text"),i;try{i=r.getComputedTextLength();if(i<=0)throw Error()}catch(s){i=e.utils.calcApproxTextWidth(r)}b.push(i+28)});var w=0,E=0,S=[];while(E<h&&w<b.length)S[w]=b[w],E+=b[w++];w===0&&(w=1);while(E>h&&w>1){S=[],w--;for(var x=0;x<b.length;x++)b[x]>(S[x%w]||0)&&(S[x%w]=b[x]);E=S.reduce(function(e,t,n,r){return e+t})}var T=[];for(var N=0,C=0;N<w;N++)T[N]=C,C+=S[N];g.attr("transform",function(e,t){return"translate("+T[t%w]+","+(5+Math.floor(t/w)*20)+")"}),u?m.attr("transform","translate("+(n-t.right-E)+","+t.top+")"):m.attr("transform","translate(0,"+t.top+")"),r=t.top+t.bottom+Math.ceil(b.length/w)*20}else{var k=5,L=5,A=0,O;g.attr("transform",function(e,r){var i=d3.select(this).select("text").node().getComputedTextLength()+28;return O=L,n<t.left+t.right+O+i&&(L=O=5,k+=20),L+=i,L>A&&(A=L),"translate("+O+","+k+")"}),m.attr("transform","translate("+(n-t.right-A)+","+t.top+")"),r=t.top+t.bottom+k+15}}),c}var t={top:5,right:0,bottom:5,left:0},n=400,r=20,i=function(e){return e.key},s=e.utils.defaultColor(),o=!0,u=!0,a=!0,f=!1,l=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange");return c.dispatch=l,c.options=e.utils.optionsFunc.bind(c),c.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,c):t},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.key=function(e){return arguments.length?(i=e,c):i},c.color=function(t){return arguments.length?(s=e.utils.getColor(t),c):s},c.align=function(e){return arguments.length?(o=e,c):o},c.rightAlign=function(e){return arguments.length?(u=e,c):u},c.updateState=function(e){return arguments.length?(a=e,c):a},c.radioButtonMode=function(e){return arguments.length?(f=e,c):f},c},e.models.line=function(){function m(g){return g.each(function(m){var g=r-n.left-n.right,b=i-n.top-n.bottom,w=d3.select(this);c=t.xScale(),h=t.yScale(),d=d||c,v=v||h;var E=w.selectAll("g.nv-wrap.nv-line").data([m]),S=E.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),T=S.append("defs"),N=S.append("g"),C=E.select("g");N.append("g").attr("class","nv-groups"),N.append("g").attr("class","nv-scatterWrap"),E.attr("transform","translate("+n.left+","+n.top+")"),t.width(g).height(b);var k=E.select(".nv-scatterWrap");k.call(t),T.append("clipPath").attr("id","nv-edge-clip-"+t.id()).append("rect"),E.select("#nv-edge-clip-"+t.id()+" rect").attr("width",g).attr("height",b>0?b:0),C.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":""),k.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":"");var L=E.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});L.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),L.exit().remove(),L.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return s(e,t)}).style("stroke",function(e,t){return s(e,t)}),L.style("stroke-opacity",1).style("fill-opacity",.5);var A=L.selectAll("path.nv-area").data(function(e){return f(e)?[e]:[]});A.enter().append("path").attr("class","nv-area").attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))}).y1(function(e,t){return v(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])}),L.exit().selectAll("path.nv-area").remove(),A.attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))}).y1(function(e,t){return h(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])});var O=L.selectAll("path.nv-line").data(function(e){return[e.values]});O.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))})),O.attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))})),d=c.copy(),v=h.copy()}),m}var t=e.models.scatter(),n={top:0,right:0,bottom:0,left:0},r=960,i=500,s=e.utils.defaultColor(),o=function(e){return e.x},u=function(e){return e.y},a=function(e,t){return!isNaN(u(e,t))&&u(e,t)!==null},f=function(e){return e.area},l=!1,c,h,p="linear";t.size(16).sizeDomain([16,256]);var d,v;return m.dispatch=t.dispatch,m.scatter=t,d3.rebind(m,t,"id","interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","padData","highlightPoint","clearHighlights"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.height=function(e){return arguments.length?(i=e,m):i},m.x=function(e){return arguments.length?(o=e,t.x(e),m):o},m.y=function(e){return arguments.length?(u=e,t.y(e),m):u},m.clipEdge=function(e){return arguments.length?(l=e,m):l},m.color=function(n){return arguments.length?(s=e.utils.getColor(n),t.color(s),m):s},m.interpolate=function(e){return arguments.length?(p=e,m):p},m.defined=function(e){return arguments.length?(a=e,m):a},m.isArea=function(e){return arguments.length?(f=d3.functor(e),m):f},m},e.models.lineChart=function(){function N(m){return m.each(function(m){var x=d3.select(this),C=this,k=(a||parseInt(x.style("width"))||960)-o.left-o.right,L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom;N.update=function(){x.call(N)},N.container=this,b.disabled=m.map(function(e){return!!e.disabled});if(!w){var A;w={};for(A in b)b[A]instanceof Array?w[A]=b[A].slice(0):w[A]=b[A]}if(!m||!m.length||!m.filter(function(e){return e.values.length}).length){var O=x.selectAll(".nv-noData").data([E]);return O.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),O.attr("x",o.left+k/2).attr("y",o.top+L/2).text(function(e){return e}),N}x.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var M=x.selectAll("g.nv-wrap.nv-lineChart").data([m]),_=M.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),D=M.select("g");_.append("rect").style("opacity",0),_.append("g").attr("class","nv-x nv-axis"),_.append("g").attr("class","nv-y nv-axis"),_.append("g").attr("class","nv-linesWrap"),_.append("g").attr("class","nv-legendWrap"),_.append("g").attr("class","nv-interactive"),D.select("rect").attr("width",k).attr("height",L>0?L:0),l&&(i.width(k),D.select(".nv-legendWrap").datum(m).call(i),o.top!=i.height()&&(o.top=i.height(),L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom),M.select(".nv-legendWrap").attr("transform","translate(0,"+ -o.top+")")),M.attr("transform","translate("+o.left+","+o.top+")"),p&&D.select(".nv-y.nv-axis").attr("transform","translate("+k+",0)"),d&&(s.width(k).height(L).margin({left:o.left,top:o.top}).svgContainer(x).xScale(g),M.select(".nv-interactive").call(s)),t.width(k).height(L).color(m.map(function(e,t){return e.color||u(e,t)}).filter(function(e,t){return!m[t].disabled}));var P=D.select(".nv-linesWrap").datum(m.filter(function(e){return!e.disabled}));P.call(t),c&&(n.scale(g).ticks(k/100).tickSize(-L,0),D.select(".nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),D.select(".nv-x.nv-axis").call(n)),h&&(r.scale(y).ticks(L/36).tickSize(-k,0),D.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),N.update()}),s.dispatch.on("elementMousemove",function(i){t.clearHighlights();var a,f,l,c=[];m.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,N.x()),t.highlightPoint(r,f,!0);var s=n.values[f];if(typeof s=="undefined")return;typeof a=="undefined"&&(a=s),typeof l=="undefined"&&(l=N.xScale()(N.x()(s,f))),c.push({key:n.key,value:N.y()(s,f),color:u(n,n.seriesIndex)})});if(c.length>2){var h=N.yScale().invert(i.mouseY),p=Math.abs(N.yScale().domain()[0]-N.yScale().domain()[1]),d=.03*p,g=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);g!==null&&(c[g].highlight=!0)}var y=n.tickFormat()(N.x()(a,f));s.tooltip.position({left:l+o.left,top:i.mouseY+o.top}).chartContainer(C.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:y,series:c})(),s.renderGuideLine(l)}),s.dispatch.on("elementMouseout",function(e){S.tooltipHide(),t.clearHighlights()}),S.on("tooltipShow",function(e){v&&T(e,C.parentNode)}),S.on("changeState",function(e){typeof e.disabled!="undefined"&&m.length===e.disabled.length&&(m.forEach(function(t,n){t.disabled=e.disabled[n]}),b.disabled=e.disabled),N.update()})}),N}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.interactiveGuideline(),o={top:30,right:20,bottom:50,left:60},u=e.utils.defaultColor(),a=null,f=null,l=!0,c=!0,h=!0,p=!1,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=0;n.orient("bottom").tickPadding(7),r.orient(p?"right":"left");var T=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,N);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),N.dispatch=S,N.lines=t,N.legend=i,N.xAxis=n,N.yAxis=r,N.interactiveLayer=s,d3.rebind(N,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id","interpolate"),N.options=e.utils.optionsFunc.bind(N),N.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,N):o},N.width=function(e){return arguments.length?(a=e,N):a},N.height=function(e){return arguments.length?(f=e,N):f},N.color=function(t){return arguments.length?(u=e.utils.getColor(t),i.color(u),N):u},N.showLegend=function(e){return arguments.length?(l=e,N):l},N.showXAxis=function(e){return arguments.length?(c=e,N):c},N.showYAxis=function(e){return arguments.length?(h=e,N):h},N.rightAlignYAxis=function(e){return arguments.length?(p=e,r.orient(e?"right":"left"),N):p},N.useInteractiveGuideline=function(e){return arguments.length?(d=e,e===!0&&(N.interactive(!1),N.useVoronoi(!1)),N):d},N.tooltips=function(e){return arguments.length?(v=e,N):v},N.tooltipContent=function(e){return arguments.length?(m=e,N):m},N.state=function(e){return arguments.length?(b=e,N):b},N.defaultState=function(e){return arguments.length?(w=e,N):w},N.noData=function(e){return arguments.length?(E=e,N):E},N.transitionDuration=function(e){return arguments.length?(x=e,N):x},N},e.models.linePlusBarChart=function(){function T(e){return e.each(function(e){var l=d3.select(this),c=this,v=(a||parseInt(l.style("width"))||960)-u.left-u.right,N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom;T.update=function(){l.call(T)},b.disabled=e.map(function(e){return!!e.disabled});if(!w){var C;w={};for(C in b)b[C]instanceof Array?w[C]=b[C].slice(0):w[C]=b[C]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var k=l.selectAll(".nv-noData").data([E]);return k.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),k.attr("x",u.left+v/2).attr("y",u.top+N/2).text(function(e){return e}),T}l.selectAll(".nv-noData").remove();var L=e.filter(function(e){return!e.disabled&&e.bar}),A=e.filter(function(e){return!e.bar});m=A.filter(function(e){return!e.disabled}).length&&A.filter(function(e){return!e.disabled})[0].values.length?t.xScale():n.xScale(),g=n.yScale(),y=t.yScale();var O=d3.select(this).selectAll("g.nv-wrap.nv-linePlusBar").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y1 nv-axis"),M.append("g").attr("class","nv-y2 nv-axis"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-linesWrap"),M.append("g").attr("class","nv-legendWrap"),p&&(o.width(v/2),_.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(o),u.top!=o.height()&&(u.top=o.height(),N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom),_.select(".nv-legendWrap").attr("transform","translate("+v/2+","+ -u.top+")")),O.attr("transform","translate("+u.left+","+u.top+")"),t.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar})),n.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar}));var D=_.select(".nv-barsWrap").datum(L.length?L:[{values:[]}]),P=_.select(".nv-linesWrap").datum(A[0]&&!A[0].disabled?A:[{values:[]}]);d3.transition(D).call(n),d3.transition(P).call(t),r.scale(m).ticks(v/100).tickSize(-N,0),_.select(".nv-x.nv-axis").attr("transform","translate(0,"+g.range()[0]+")"),d3.transition(_.select(".nv-x.nv-axis")).call(r),i.scale(g).ticks(N/36).tickSize(-v,0),d3.transition(_.select(".nv-y1.nv-axis")).style("opacity",L.length?1:0).call(i),s.scale(y).ticks(N/36).tickSize(L.length?0:-v,0),_.select(".nv-y2.nv-axis").style("opacity",A.length?1:0).attr("transform","translate("+v+",0)"),d3.transition(_.select(".nv-y2.nv-axis")).call(s),o.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),T.update()}),S.on("tooltipShow",function(e){d&&x(e,c.parentNode)}),S.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),b.disabled=t.disabled),T.update()})}),T}var t=e.models.line(),n=e.models.historicalBar(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.legend(),u={top:30,right:60,bottom:50,left:60},a=null,f=null,l=function(e){return e.x},c=function(e){return e.y},h=e.utils.defaultColor(),p=!0,d=!0,v=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},m,g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState");n.padData(!0),t.clipEdge(!1).padData(!0),r.orient("bottom").tickPadding(7).highlightZero(!1),i.orient("left"),s.orient("right");var x=function(n,o){var u=n.pos[0]+(o.offsetLeft||0),a=n.pos[1]+(o.offsetTop||0),f=r.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?i:s).tickFormat()(t.y()(n.point,n.pointIndex)),c=v(n.series.key,f,l,n,T);e.tooltip.show([u,a],c,n.value<0?"n":"s",null,o)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),n.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),n.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){d&&e.tooltip.cleanup()}),T.dispatch=S,T.legend=o,T.lines=t,T.bars=n,T.xAxis=r,T.y1Axis=i,T.y2Axis=s,d3.rebind(T,t,"defined","size","clipVoronoi","interpolate"),T.options=e.utils.optionsFunc.bind(T),T.x=function(e){return arguments.length?(l=e,t.x(e),n.x(e),T):l},T.y=function(e){return arguments.length?(c=e,t.y(e),n.y(e),T):c},T.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,T):u},T.width=function(e){return arguments.length?(a=e,T):a},T.height=function(e){return arguments.length?(f=e,T):f},T.color=function(t){return arguments.length?(h=e.utils.getColor(t),o.color(h),T):h},T.showLegend=function(e){return arguments.length?(p=e,T):p},T.tooltips=function(e){return arguments.length?(d=e,T):d},T.tooltipContent=function(e){return arguments.length?(v=e,T):v},T.state=function(e){return arguments.length?(b=e,T):b},T.defaultState=function(e){return arguments.length?(w=e,T):w},T.noData=function(e){return arguments.length?(E=e,T):E},T},e.models.lineWithFocusChart=function(){function k(e){return e.each(function(e){function R(e){var t=+(e=="e"),n=t?1:-1,r=O/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function U(){a.empty()||a.extent(w),F.data([a.empty()?g.domain():w]).each(function(e,t){var n=g(e[0])-v.range()[0],r=v.range()[1]-g(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",g(e[1])).attr("width",r<0?0:r)})}function z(){w=a.empty()?null:a.extent();var n=a.empty()?g.domain():a.extent();if(Math.abs(n[0]-n[1])<=1)return;T.brush({extent:n,brush:a}),U();var s=P.select(".nv-focus .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}).map(function(e,r){return{key:e.key,values:e.values.filter(function(e,r){return t.x()(e,r)>=n[0]&&t.x()(e,r)<=n[1]})}}));s.call(t),P.select(".nv-focus .nv-x.nv-axis").call(r),P.select(".nv-focus .nv-y.nv-axis").call(i)}var S=d3.select(this),N=this,L=(h||parseInt(S.style("width"))||960)-f.left-f.right,A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d,O=d-l.top-l.bottom;k.update=function(){S.call(k)},k.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var M=S.selectAll(".nv-noData").data([x]);return M.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),M.attr("x",f.left+L/2).attr("y",f.top+A/2).text(function(e){return e}),k}S.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale(),g=n.xScale(),y=n.yScale();var _=S.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([e]),D=_.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),P=_.select("g");D.append("g").attr("class","nv-legendWrap");var H=D.append("g").attr("class","nv-focus");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-linesWrap");var B=D.append("g").attr("class","nv-context");B.append("g").attr("class","nv-x nv-axis"),B.append("g").attr("class","nv-y nv-axis"),B.append("g").attr("class","nv-linesWrap"),B.append("g").attr("class","nv-brushBackground"),B.append("g").attr("class","nv-x nv-brush"),b&&(u.width(L),P.select(".nv-legendWrap").datum(e).call(u),f.top!=u.height()&&(f.top=u.height(),A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d),P.select(".nv-legendWrap").attr("transform","translate(0,"+ -f.top+")")),_.attr("transform","translate("+f.left+","+f.top+")"),t.width(L).height(A).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),n.defined(t.defined()).width(L).height(O).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),P.select(".nv-context").attr("transform","translate(0,"+(A+f.bottom+l.top)+")");var j=P.select(".nv-context .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}));d3.transition(j).call(n),r.scale(v).ticks(L/100).tickSize(-A,0),i.scale(m).ticks(A/36).tickSize(-L,0),P.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+A+")"),a.x(g).on("brush",function(){var e=k.transitionDuration();k.transitionDuration(0),z(),k.transitionDuration(e)}),w&&a.extent(w);var F=P.select(".nv-brushBackground").selectAll("g").data([w||a.extent()]),I=F.enter().append("g");I.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",O),I.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",O);var q=P.select(".nv-x.nv-brush").call(a);q.selectAll("rect").attr("height",O),q.selectAll(".resize").append("path").attr("d",R),z(),s.scale(g).ticks(L/100).tickSize(-O,0),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),d3.transition(P.select(".nv-context .nv-x.nv-axis")).call(s),o.scale(y).ticks(O/36).tickSize(-L,0),d3.transition(P.select(".nv-context .nv-y.nv-axis")).call(o),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),u.dispatch.on("stateChange",function(e){k.update()}),T.on("tooltipShow",function(e){E&&C(e,N.parentNode)})}),k}var t=e.models.line(),n=e.models.line(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.axis(),u=e.models.legend(),a=d3.svg.brush(),f={top:30,right:30,bottom:30,left:60},l={top:0,right:30,bottom:20,left:60},c=e.utils.defaultColor(),h=null,p=null,d=100,v,m,g,y,b=!0,w=null,E=!0,S=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},x="No Data Available.",T=d3.dispatch("tooltipShow","tooltipHide","brush"),N=0;t.clipEdge(!0),n.interactive(!1),r.orient("bottom").tickPadding(5),i.orient("left"),s.orient("bottom").tickPadding(5),o.orient("left");var C=function(n,s){var o=n.pos[0]+(s.offsetLeft||0),u=n.pos[1]+(s.offsetTop||0),a=r.tickFormat()(t.x()(n.point,n.pointIndex)),f=i.tickFormat()(t.y()(n.point,n.pointIndex)),l=S(n.series.key,a,f,n,k);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+f.left,e.pos[1]+f.top],T.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){E&&e.tooltip.cleanup()}),k.dispatch=T,k.legend=u,k.lines=t,k.lines2=n,k.xAxis=r,k.yAxis=i,k.x2Axis=s,k.y2Axis=o,d3.rebind(k,t,"defined","isArea","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id"),k.options=e.utils.optionsFunc.bind(k),k.x=function(e){return arguments.length?(t.x(e),n.x(e),k):t.x},k.y=function(e){return arguments.length?(t.y(e),n.y(e),k):t.y},k.margin=function(e){return arguments.length?(f.top=typeof e.top!="undefined"?e.top:f.top,f.right=typeof e.right!="undefined"?e.right:f.right,f.bottom=typeof e.bottom!="undefined"?e.bottom:f.bottom,f.left=typeof e.left!="undefined"?e.left:f.left,k):f},k.margin2=function(e){return arguments.length?(l=e,k):l},k.width=function(e){return arguments.length?(h=e,k):h},k.height=function(e){return arguments.length?(p=e,k):p},k.height2=function(e){return arguments.length?(d=e,k):d},k.color=function(t){return arguments.length?(c=e.utils.getColor(t),u.color(c),k):c},k.showLegend=function(e){return arguments.length?(b=e,k):b},k.tooltips=function(e){return arguments.length?(E=e,k):E},k.tooltipContent=function(e){return arguments.length?(S=e,k):S},k.interpolate=function(e){return arguments.length?(t.interpolate(e),n.interpolate(e),k):t.interpolate()},k.noData=function(e){return arguments.length?(x=e,k):x},k.xTickFormat=function(e){return arguments.length?(r.tickFormat(e),s.tickFormat(e),k):r.tickFormat()},k.yTickFormat=function(e){return arguments.length?(i.tickFormat(e),o.tickFormat(e),k):i.tickFormat()},k.brushExtent=function(e){return arguments.length?(w=e,k):w},k.transitionDuration=function(e){return arguments.length?(N=e,k):N},k},e.models.linePlusBarWithFocusChart=function(){function B(e){return e.each(function(e){function tt(e){var t=+(e=="e"),n=t?1:-1,r=I/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function nt(){h.empty()||h.extent(x),Y.data([h.empty()?k.domain():x]).each(function(e,t){var n=k(e[0])-k.range()[0],r=k.range()[1]-k(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",k(e[1])).attr("width",r<0?0:r)})}function rt(){x=h.empty()?null:h.extent(),S=h.empty()?k.domain():h.extent(),D.brush({extent:S,brush:h}),nt(),r.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),t.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var n=$.select(".nv-focus .nv-barsWrap").datum(R.length?R.map(function(e,t){return{key:e.key,values:e.values.filter(function(e,t){return r.x()(e,t)>=S[0]&&r.x()(e,t)<=S[1]})}}):[{values:[]}]),i=$.select(".nv-focus .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U.map(function(e,n){return{key:e.key,values:e.values.filter(function(e,n){return t.x()(e,n)>=S[0]&&t.x()(e,n)<=S[1]})}}));R.length?C=r.xScale():C=t.xScale(),s.scale(C).ticks(j/100).tickSize(-F,0),s.domain([Math.ceil(S[0]),Math.floor(S[1])]),$.select(".nv-x.nv-axis").call(s),n.call(r),i.call(t),$.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L.range()[0]+")"),u.scale(L).ticks(F/36).tickSize(-j,0),$.select(".nv-focus .nv-y1.nv-axis").style("opacity",R.length?1:0),a.scale(A).ticks(F/36).tickSize(R.length?0:-j,0),$.select(".nv-focus .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+C.range()[1]+",0)"),$.select(".nv-focus .nv-y1.nv-axis").call(u),$.select(".nv-focus .nv-y2.nv-axis").call(a)}var N=d3.select(this),P=this,j=(v||parseInt(N.style("width"))||960)-p.left-p.right,F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g,I=g-d.top-d.bottom;B.update=function(){N.call(B)},B.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=N.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",p.left+j/2).attr("y",p.top+F/2).text(function(e){return e}),B}N.selectAll(".nv-noData").remove();var R=e.filter(function(e){return!e.disabled&&e.bar}),U=e.filter(function(e){return!e.bar});C=r.xScale(),k=o.scale(),L=r.yScale(),A=t.yScale(),O=i.yScale(),M=n.yScale();var z=e.filter(function(e){return!e.disabled&&e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})}),W=e.filter(function(e){return!e.disabled&&!e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})});C.range([0,j]),k.domain(d3.extent(d3.merge(z.concat(W)),function(e){return e.x})).range([0,j]);var X=N.selectAll("g.nv-wrap.nv-linePlusBar").data([e]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),$=X.select("g");V.append("g").attr("class","nv-legendWrap");var J=V.append("g").attr("class","nv-focus");J.append("g").attr("class","nv-x nv-axis"),J.append("g").attr("class","nv-y1 nv-axis"),J.append("g").attr("class","nv-y2 nv-axis"),J.append("g").attr("class","nv-barsWrap"),J.append("g").attr("class","nv-linesWrap");var K=V.append("g").attr("class","nv-context");K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y1 nv-axis"),K.append("g").attr("class","nv-y2 nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-linesWrap"),K.append("g").attr("class","nv-brushBackground"),K.append("g").attr("class","nv-x nv-brush"),E&&(c.width(j/2),$.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(c),p.top!=c.height()&&(p.top=c.height(),F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g),$.select(".nv-legendWrap").attr("transform","translate("+j/2+","+ -p.top+")")),X.attr("transform","translate("+p.left+","+p.top+")"),i.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),n.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var Q=$.select(".nv-context .nv-barsWrap").datum(R.length?R:[{values:[]}]),G=$.select(".nv-context .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U);$.select(".nv-context").attr("transform","translate(0,"+(F+p.bottom+d.top)+")"),Q.call(i),G.call(n),h.x(k).on("brush",rt),x&&h.extent(x);var Y=$.select(".nv-brushBackground").selectAll("g").data([x||h.extent()]),Z=Y.enter().append("g");Z.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",I),Z.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",I);var et=$.select(".nv-x.nv-brush").call(h);et.selectAll("rect").attr("height",I),et.selectAll(".resize").append("path").attr("d",tt),o.ticks(j/100).tickSize(-I,0),$.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+O.range()[0]+")"),$.select(".nv-context .nv-x.nv-axis").call(o),f.scale(O).ticks(I/36).tickSize(-j,0),$.select(".nv-context .nv-y1.nv-axis").style("opacity",R.length?1:0).attr("transform","translate(0,"+k.range()[0]+")"),$.select(".nv-context .nv-y1.nv-axis").call(f),l.scale(M).ticks(I/36).tickSize(R.length?0:-j,0),$.select(".nv-context .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+k.range()[1]+",0)"),$.select(".nv-context .nv-y2.nv-axis").call(l),c.dispatch.on("stateChange",function(e){B.update()}),D.on("tooltipShow",function(e){T&&H(e,P.parentNode)}),rt()}),B}var t=e.models.line(),n=e.models.line(),r=e.models.historicalBar(),i=e.models.historicalBar(),s=e.models.axis(),o=e.models.axis(),u=e.models.axis(),a=e.models.axis(),f=e.models.axis(),l=e.models.axis(),c=e.models.legend(),h=d3.svg.brush(),p={top:30,right:30,bottom:30,left:60},d={top:0,right:30,bottom:20,left:60},v=null,m=null,g=100,y=function(e){return e.x},b=function(e){return e.y},w=e.utils.defaultColor(),E=!0,S,x=null,T=!0,N=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},C,k,L,A,O,M,_="No Data Available.",D=d3.dispatch("tooltipShow","tooltipHide","brush"),P=0;t.clipEdge(!0),n.interactive(!1),s.orient("bottom").tickPadding(5),u.orient("left"),a.orient("right"),o.orient("bottom").tickPadding(5),f.orient("left"),l.orient("right");var H=function(n,r){S&&(n.pointIndex+=Math.ceil(S[0]));var i=n.pos[0]+(r.offsetLeft||0),o=n.pos[1]+(r.offsetTop||0),f=s.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?u:a).tickFormat()(t.y()(n.point,n.pointIndex)),c=N(n.series.key,f,l,n,B);e.tooltip.show([i,o],c,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),r.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),r.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),D.on("tooltipHide",function(){T&&e.tooltip.cleanup()}),B.dispatch=D,B.legend=c,B.lines=t,B.lines2=n,B.bars=r,B.bars2=i,B.xAxis=s,B.x2Axis=o,B.y1Axis=u,B.y2Axis=a,B.y3Axis=f,B.y4Axis=l,d3.rebind(B,t,"defined","size","clipVoronoi","interpolate"),B.options=e.utils.optionsFunc.bind(B),B.x=function(e){return arguments.length?(y=e,t.x(e),r.x(e),B):y},B.y=function(e){return arguments.length?(b=e,t.y(e),r.y(e),B):b},B.margin=function(e){return arguments.length?(p.top=typeof e.top!="undefined"?e.top:p.top,p.right=typeof e.right!="undefined"?e.right:p.right,p.bottom=typeof e.bottom!="undefined"?e.bottom:p.bottom,p.left=typeof e.left!="undefined"?e.left:p.left,B):p},B.width=function(e){return arguments.length?(v=e,B):v},B.height=function(e){return arguments.length?(m=e,B):m},B.color=function(t){return arguments.length?(w=e.utils.getColor(t),c.color(w),B):w},B.showLegend=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(T=e,B):T},B.tooltipContent=function(e){return arguments.length?(N=e,B):N},B.noData=function(e){return arguments.length?(_=e,B):_},B.brushExtent=function(e){return arguments.length?(x=e,B):x},B},e.models.multiBar=function(){function C(e){return e.each(function(e){var g=n-t.left-t.right,C=r-t.top-t.bottom,k=d3.select(this);d&&e.length&&(d=[{values:e[0].values.map(function(e){return{x:e.x,y:0,series:e.series,size:.01}})}]),c&&(e=d3.layout.stack().offset(h).values(function(e){return e.values}).y(a)(!e.length&&d?d:e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),c&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i,i-=t.size):(t.y1=t.size+r,r+=t.size)})});var L=y&&b?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});i.domain(y||d3.merge(L).map(function(e){return e.x})).rangeBands(w||[0,g],S),s.domain(b||d3.extent(d3.merge(L).map(function(e){return c?e.y>0?e.y1:e.y1+e.y:e.y}).concat(f))).range(E||[C,0]),i.domain()[0]===i.domain()[1]&&(i.domain()[0]?i.domain([i.domain()[0]-i.domain()[0]*.01,i.domain()[1]+i.domain()[1]*.01]):i.domain([-1,1])),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]+s.domain()[0]*.01,s.domain()[1]-s.domain()[1]*.01]):s.domain([-1,1])),T=T||i,N=N||s;var A=k.selectAll("g.nv-wrap.nv-multibar").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),M=O.append("defs"),_=O.append("g"),D=A.select("g");_.append("g").attr("class","nv-groups"),A.attr("transform","translate("+t.left+","+t.top+")"),M.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),A.select("#nv-edge-clip-"+o+" rect").attr("width",g).attr("height",C),D.attr("clip-path",l?"url(#nv-edge-clip-"+o+")":"");var P=A.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});P.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),P.exit().selectAll("rect.nv-bar").attr("y",function(e){return c?N(e.y0):N(0)}).attr("height",0).remove(),P.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return p(e,t)}).style("stroke",function(e,t){return p(e,t)}),P.style("stroke-opacity",1).style("fill-opacity",.75);var H=P.selectAll("rect.nv-bar").data(function(t){return d&&!e.length?d.values:t.values});H.exit().remove();var B=H.enter().append("rect").attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("x",function(t,n,r){return c?0:r*i.rangeBand()/e.length}).attr("y",function(e){return N(c?e.y0:0)}).attr("height",0).attr("width",i.rangeBand()/(c?1:e.length)).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"});H.style("fill",function(e,t,n){return p(e,n,t)}).style("stroke",function(e,t,n){return p(e,n,t)}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"}),v&&(m||(m=e.map(function(){return!0})),H.style("fill",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()})),c?H.attr("y",function(e,t){return s(c?e.y1:0)}).attr("height",function(e,t){return Math.max(Math.abs(s(e.y+(c?e.y0:0))-s(c?e.y0:0)),1)}).attr("x",function(t,n){return c?0:t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/(c?1:e.length)):H.attr("x",function(t,n){return t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/e.length).attr("y",function(e,t){return a(e,t)<0?s(0):s(0)-s(a(e,t))<1?s(0)-1:s(a(e,t))||0}).attr("height",function(e,t){return Math.max(Math.abs(s(a(e,t))-s(0)),1)||0}),T=i.copy(),N=s.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=d3.scale.ordinal(),s=d3.scale.linear(),o=Math.floor(Math.random()*1e4),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=!0,c=!1,h="zero",p=e.utils.defaultColor(),d=!1,v=null,m,g=1200,y,b,w,E,S=.1,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(i=e,C):i},C.yScale=function(e){return arguments.length?(s=e,C):s},C.xDomain=function(e){return arguments.length?(y=e,C):y},C.yDomain=function(e){return arguments.length?(b=e,C):b},C.xRange=function(e){return arguments.length?(w=e,C):w},C.yRange=function(e){return arguments.length?(E=e,C):E},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(c=e,C):c},C.stackOffset=function(e){return arguments.length?(h=e,C):h},C.clipEdge=function(e){return arguments.length?(l=e,C):l},C.color=function(t){return arguments.length?(p=e.utils.getColor(t),C):p},C.barColor=function(t){return arguments.length?(v=e.utils.getColor(t),C):v},C.disabled=function(e){return arguments.length?(m=e,C):m},C.id=function(e){return arguments.length?(o=e,C):o},C.hideable=function(e){return arguments.length?(d=e,C):d},C.delay=function(e){return arguments.length?(g=e,C):g},C.groupSpacing=function(e){return arguments.length?(S=e,C):S},C},e.models.multiBarChart=function(){function A(e){return e.each(function(e){var b=d3.select(this),k=this,O=(u||parseInt(b.style("width"))||960)-o.left-o.right,M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom;A.update=function(){b.call(A)},A.container=this,S.disabled=e.map(function(e){return!!e.disabled});if(!x){var _;x={};for(_ in S)S[_]instanceof Array?x[_]=S[_].slice(0):x[_]=S[_]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var D=b.selectAll(".nv-noData").data([T]);return D.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),D.attr("x",o.left+O/2).attr("y",o.top+M/2).text(function(e){return e}),A}b.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();var P=b.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([e]),H=P.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),B=P.select("g");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-barsWrap"),H.append("g").attr("class","nv-legendWrap"),H.append("g").attr("class","nv-controlsWrap"),c&&(i.width(O-C()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),B.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom),B.select(".nv-legendWrap").attr("transform","translate("+C()+","+ -o.top+")"));if(l){var j=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(C()).color(["#444","#444","#444"]),B.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -o.top+")").call(s)}P.attr("transform","translate("+o.left+","+o.top+")"),d&&B.select(".nv-y.nv-axis").attr("transform","translate("+O+",0)"),t.disabled(e.map(function(e){return e.disabled})).width(O).height(M).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var F=B.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));F.call(t);if(h){n.scale(w).ticks(O/100).tickSize(-M,0),B.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),B.select(".nv-x.nv-axis").call(n);var I=B.select(".nv-x.nv-axis > g").selectAll("g");I.selectAll("line, text").style("opacity",1);if(m){var q=function(e,t){return"translate("+e+","+t+")"},R=5,U=17;I.selectAll("text").attr("transform",function(e,t,n){return q(0,n%2==0?R:U)});var z=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;B.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(e,t){return q(0,t===0||z%2!==0?U:R)})}v&&I.filter(function(t,n){return n%Math.ceil(e[0].values.length/(O/100))!==0}).selectAll("text, line").style("opacity",0),g&&I.selectAll(".tick text").attr("transform","rotate("+g+" 0,0)").style("text-anchor",g>0?"start":"end"),B.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}p&&(r.scale(E).ticks(M/36).tickSize(-O,0),B.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){S=e,N.stateChange(S),A.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;j=j.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}S.stacked=t.stacked(),N.stateChange(S),A.update()}),N.on("tooltipShow",function(e){y&&L(e,k.parentNode)}),N.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),S.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),S.stacked=n.stacked),A.update()})}),A}var t=e.models.multiBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=!1,g=0,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},w,E,S={stacked:!1},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=function(){return l?180:0},k=0;t.stacked(!1),n.orient("bottom").tickPadding(7).highlightZero(!0).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(d?"right":"left").tickFormat(d3.format(",.1f")),s.updateState(!1);var L=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,A);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],N.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){y&&e.tooltip.cleanup()}),A.dispatch=N,A.multibar=t,A.legend=i,A.xAxis=n,A.yAxis=r,d3.rebind(A,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","stacked","stackOffset","delay","barColor","groupSpacing"),A.options=e.utils.optionsFunc.bind(A),A.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,A):o},A.width=function(e){return arguments.length?(u=e,A):u},A.height=function(e){return arguments.length?(a=e,A):a},A.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),A):f},A.showControls=function(e){return arguments.length?(l=e,A):l},A.showLegend=function(e){return arguments.length?(c=e,A):c},A.showXAxis=function(e){return arguments.length?(h=e,A):h},A.showYAxis=function(e){return arguments.length?(p=e,A):p},A.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),A):d},A.reduceXTicks=function(e){return arguments.length?(v=e,A):v},A.rotateLabels=function(e){return arguments.length?(g=e,A):g},A.staggerLabels=function(e){return arguments.length?(m=e,A):m},A.tooltip=function(e){return arguments.length?(b=e,A):b},A.tooltips=function(e){return arguments.length?(y=e,A):y},A.tooltipContent=function(e){return arguments.length?(b=e,A):b},A.state=function(e){return arguments.length?(S=e,A):S},A.defaultState=function(e){return arguments.length?(x=e,A):x},A.noData=function(e){return arguments.length?(T=e,A):T},A.transitionDuration=function(e){return arguments.length?(k=e,A):k},A},e.models.multiBarHorizontal=function(){function C(e){return e.each(function(e){var i=n-t.left-t.right,y=r-t.top-t.bottom,C=d3.select(this);p&&(e=d3.layout.stack().offset("zero").values(function(e){return e.values}).y(a)(e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),p&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i-t.size,i-=t.size):(t.y1=r,r+=t.size)})});var k=b&&w?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});s.domain(b||d3.merge(k).map(function(e){return e.x})).rangeBands(E||[0,y],.1),o.domain(w||d3.extent(d3.merge(k).map(function(e){return p?e.y>0?e.y1+e.y:e.y1:e.y}).concat(f))),d&&!p?o.range(S||[o.domain()[0]<0?m:0,i-(o.domain()[1]>0?m:0)]):o.range(S||[0,i]),T=T||s,N=N||d3.scale.linear().domain(o.domain()).range([o(0),o(0)]);var L=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([e]),A=L.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),O=A.append("defs"),M=A.append("g"),_=L.select("g");M.append("g").attr("class","nv-groups"),L.attr("transform","translate("+t.left+","+t.top+")");var D=L.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return l(e,t)}).style("stroke",function(e,t){return l(e,t)}),D.style("stroke-opacity",1).style("fill-opacity",.75);var P=D.selectAll("g.nv-bar").data(function(e){return e.values});P.exit().remove();var H=P.enter().append("g").attr("transform",function(t,n,r){return"translate("+N(p?t.y0:0)+","+(p?0:r*s.rangeBand()/e.length+s(u(t,n)))+")"});H.append("rect").attr("width",0).attr("height",s.rangeBand()/(p?1:e.length)),P.on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[o(a(t,n)+(p?t.y0:0)),s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.append("text"),d&&!p?(P.select("text").attr("text-anchor",function(e,t){return a(e,t)<0?"end":"start"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return g(a(e,t))}),P.select("text").attr("x",function(e,t){return a(e,t)<0?-4:o(a(e,t))-o(0)+4})):P.selectAll("text").text(""),v&&!p?(H.append("text").classed("nv-bar-label",!0),P.select("text.nv-bar-label").attr("text-anchor",function(e,t){return a(e,t)<0?"start":"end"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return u(e,t)}),P.select("text.nv-bar-label").attr("x",function(e,t){return a(e,t)<0?o(0)-o(a(e,t))+4:-4})):P.selectAll("text.nv-bar-label").text(""),P.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}),c&&(h||(h=e.map(function(){return!0})),P.style("fill",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()})),p?P.attr("transform",function(e,t){return"translate("+o(e.y1)+","+s(u(e,t))+")"}).select("rect").attr("width",function(e,t){return Math.abs(o(a(e,t)+e.y0)-o(e.y0))}).attr("height",s.rangeBand()):P.attr("transform",function(t,n){return"translate("+(a(t,n)<0?o(a(t,n)):o(0))+","+(t.series*s.rangeBand()/e.length+s(u(t,n)))+")"}).select("rect").attr("height",s.rangeBand()/e.length).attr("width",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(0)),1)}),T=s.copy(),N=o.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=null,h,p=!1,d=!1,v=!1,m=60,g=d3.format(",.2f"),y=1200,b,w,E,S,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(s=e,C):s},C.yScale=function(e){return arguments.length?(o=e,C):o},C.xDomain=function(e){return arguments.length?(b=e,C):b},C.yDomain=function(e){return arguments.length?(w=e,C):w},C.xRange=function(e){return arguments.length?(E=e,C):E},C.yRange=function(e){return arguments.length?(S=e,C):S},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(p=e,C):p},C.color=function(t){return arguments.length?(l=e.utils.getColor(t),C):l},C.barColor=function(t){return arguments.length?(c=e.utils.getColor(t),C):c},C.disabled=function(e){return arguments.length?(h=e,C):h},C.id=function(e){return arguments.length?(i=e,C):i},C.delay=function(e){return arguments.length?(y=e,C):y},C.showValues=function(e){return arguments.length?(d=e,C):d},C.showBarLabels=function(e){return arguments.length?(v=e,C):v},C.valueFormat=function(e){return arguments.length?(g=e,C):g},C.valuePadding=function(e){return arguments.length?(m=e,C):m},C},e.models.multiBarHorizontalChart=function(){function C(e){return e.each(function(e){var d=d3.select(this),m=this,T=(u||parseInt(d.style("width"))||960)-o.left-o.right,k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom;C.update=function(){d.call(C)},C.container=this,b.disabled=e.map(function(e){return!!e.disabled});if(!w){var L;w={};for(L in b)b[L]instanceof Array?w[L]=b[L].slice(0):w[L]=b[L]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var A=d.selectAll(".nv-noData").data([E]);return A.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),A.attr("x",o.left+T/2).attr("y",o.top+k/2).text(function(e){return e}),C}d.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var O=d.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-legendWrap"),M.append("g").attr("class","nv-controlsWrap"),c&&(i.width(T-x()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),_.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom),_.select(".nv-legendWrap").attr("transform","translate("+x()+","+ -o.top+")"));if(l){var D=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(x()).color(["#444","#444","#444"]),_.select(".nv-controlsWrap").datum(D).attr("transform","translate(0,"+ -o.top+")").call(s)}O.attr("transform","translate("+o.left+","+o.top+")"),t.disabled(e.map(function(e){return e.disabled})).width(T).height(k).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var P=_.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));P.call(t);if(h){n.scale(g).ticks(k/24).tickSize(-T,0),_.select(".nv-x.nv-axis").call(n);var H=_.select(".nv-x.nv-axis").selectAll("g");H.selectAll("line, text")}p&&(r.scale(y).ticks(T/100).tickSize(-k,0),_.select(".nv-y.nv-axis").attr("transform","translate(0,"+k+")"),_.select(".nv-y.nv-axis").call(r)),_.select(".nv-zeroLine line").attr("x1",y(0)).attr("x2",y(0)).attr("y1",0).attr("y2",-k),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),C.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;D=D.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}b.stacked=t.stacked(),S.stateChange(b),C.update()}),S.on("tooltipShow",function(e){v&&N(e,m.parentNode)}),S.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),b.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),b.stacked=n.stacked),C.update()})}),C}var t=e.models.multiBarHorizontal(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend().height(30),s=e.models.legend().height(30),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+" - "+t+"</h3>"+"<p>"+n+"</p>"},g,y,b={stacked:d},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=function(){return l?180:0},T=0;t.stacked(d),n.orient("left").tickPadding(5).highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient("bottom").tickFormat(d3.format(",.1f")),s.updateState(!1);var N=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,C);e.tooltip.show([o,u],l,i.value<0?"e":"w",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),C.dispatch=S,C.multibar=t,C.legend=i,C.xAxis=n,C.yAxis=r,d3.rebind(C,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","delay","showValues","showBarLabels","valueFormat","stacked","barColor"),C.options=e.utils.optionsFunc.bind(C),C.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,C):o},C.width=function(e){return arguments.length?(u=e,C):u},C.height=function(e){return arguments.length?(a=e,C):a},C.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),C):f},C.showControls=function(e){return arguments.length?(l=e,C):l},C.showLegend=function(e){return arguments.length?(c=e,C):c},C.showXAxis=function(e){return arguments.length?(h=e,C):h},C.showYAxis=function(e){return arguments.length?(p=e,C):p},C.tooltip=function(e){return arguments.length?(m=e,C):m},C.tooltips=function(e){return arguments.length?(v=e,C):v},C.tooltipContent=function(e){return arguments.length?(m=e,C):m},C.state=function(e){return arguments.length?(b=e,C):b},C.defaultState=function(e){return arguments.length?(w=e,C):w},C.noData=function(e){return arguments.length?(E=e,C):E},C.transitionDuration=function(e){return arguments.length?(T=e,C):T},C},e.models.multiChart=function(){function C(e){return e.each(function(e){var u=d3.select(this),f=this;C.update=function(){u.call(C)},C.container=this;var k=(r||parseInt(u.style("width"))||960)-t.left-t.right,L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom,A=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==1}),O=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==2}),M=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==1}),_=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==2}),D=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==1}),P=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==2}),H=e.filter(function(e){return!e.disabled&&e.yAxis==1}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})}),B=e.filter(function(e){return!e.disabled&&e.yAxis==2}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})});a.domain(d3.extent(d3.merge(H.concat(B)),function(e){return e.x})).range([0,k]);var j=u.selectAll("g.wrap.multiChart").data([e]),F=j.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");F.append("g").attr("class","x axis"),F.append("g").attr("class","y1 axis"),F.append("g").attr("class","y2 axis"),F.append("g").attr("class","lines1Wrap"),F.append("g").attr("class","lines2Wrap"),F.append("g").attr("class","bars1Wrap"),F.append("g").attr("class","bars2Wrap"),F.append("g").attr("class","stack1Wrap"),F.append("g").attr("class","stack2Wrap"),F.append("g").attr("class","legendWrap");var I=j.select("g");s&&(x.width(k/2),I.select(".legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.yAxis==1?"":" (right axis)"),e})).call(x),t.top!=x.height()&&(t.top=x.height(),L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom),I.select(".legendWrap").attr("transform","translate("+k/2+","+ -t.top+")")),d.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="line"})),v.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="line"})),m.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="bar"})),g.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="bar"})),y.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="area"})),b.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="area"})),I.attr("transform","translate("+t.left+","+t.top+")");var q=I.select(".lines1Wrap").datum(A),R=I.select(".bars1Wrap").datum(M),U=I.select(".stack1Wrap").datum(D),z=I.select(".lines2Wrap").datum(O),W=I.select(".bars2Wrap").datum(_),X=I.select(".stack2Wrap").datum(P),V=D.length?D.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[],$=P.length?P.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[];h.domain(l||d3.extent(d3.merge(H).concat(V),function(e){return e.y})).range([0,L]),p.domain(c||d3.extent(d3.merge(B).concat($),function(e){return e.y})).range([0,L]),d.yDomain(h.domain()),m.yDomain(h.domain()),y.yDomain(h.domain()),v.yDomain(p.domain()),g.yDomain(p.domain()),b.yDomain(p.domain()),D.length&&d3.transition(U).call(y),P.length&&d3.transition(X).call(b),M.length&&d3.transition(R).call(m),_.length&&d3.transition(W).call(g),A.length&&d3.transition(q).call(d),O.length&&d3.transition(z).call(v),w.ticks(k/100).tickSize(-L,0),I.select(".x.axis").attr("transform","translate(0,"+L+")"),d3.transition(I.select(".x.axis")).call(w),E.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y1.axis")).call(E),S.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y2.axis")).call(S),I.select(".y2.axis").style("opacity",B.length?1:0).attr("transform","translate("+a.range()[1]+",0)"),x.dispatch.on("stateChange",function(e){C.update()}),T.on("tooltipShow",function(e){o&&N(e,f.parentNode)})}),C}var t={top:30,right:20,bottom:50,left:60},n=d3.scale.category20().range(),r=null,i=null,s=!0,o=!0,u=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},a,f,l,c,a=d3.scale.linear(),h=d3.scale.linear(),p=d3.scale.linear(),d=e.models.line().yScale(h),v=e.models.line().yScale(p),m=e.models.multiBar().stacked(!1).yScale(h),g=e.models.multiBar().stacked(!1).yScale(p),y=e.models.stackedArea().yScale(h),b=e.models.stackedArea().yScale(p),w=e.models.axis().scale(a).orient("bottom").tickPadding(5),E=e.models.axis().scale(h).orient("left"),S=e.models.axis().scale(p).orient("right"),x=e.models.legend().height(30),T=d3.dispatch("tooltipShow","tooltipHide"),N=function(t,n){var r=t.pos[0]+(n.offsetLeft||0),i=t.pos[1]+(n.offsetTop||0),s=w.tickFormat()(d.x()(t.point,t.pointIndex)),o=(t.series.yAxis==2?S:E).tickFormat()(d.y()(t.point,t.pointIndex)),a=u(t.series.key,s,o,t,C);e.tooltip.show([r,i],a,undefined,undefined,n.offsetParent)};return d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),m.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),m.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),g.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),g.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),y.dispatch.on("tooltipShow",function(e){if(!Math.round(y.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),y.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),b.dispatch.on("tooltipShow",function(e){if(!Math.round(b.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),b.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){o&&e.tooltip.cleanup()}),C.dispatch=T,C.lines1=d,C.lines2=v,C.bars1=m,C.bars2=g,C.stack1=y,C.stack2=b,C.xAxis=w,C.yAxis1=E,C.yAxis2=S,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(getX=e,d.x(e),m.x(e),C):getX},C.y=function(e){return arguments.length?(getY=e,d.y(e),m.y(e),C):getY},C.yDomain1=function(e){return arguments.length?(l=e,C):l},C.yDomain2=function(e){return arguments.length?(c=e,C):c},C.margin=function(e){return arguments.length?(t=e,C):t},C.width=function(e){return arguments.length?(r=e,C):r},C.height=function(e){return arguments.length?(i=e,C):i},C.color=function(e){return arguments.length?(n=e,x.color(e),C):n},C.showLegend=function(e){return arguments.length?(s=e,C):s},C.tooltips=function(e){return arguments.length?(o=e,C):o},C.tooltipContent=function(e){return arguments.length?(u=e,C):u},C},e.models.ohlcBar=function(){function x(e){return e.each(function(e){var g=n-t.left-t.right,x=r-t.top-t.bottom,T=d3.select(this);s.domain(y||d3.extent(e[0].values.map(u).concat(p))),v?s.range(w||[g*.5/e[0].values.length,g*(e[0].values.length-.5)/e[0].values.length]):s.range(w||[0,g]),o.domain(b||[d3.min(e[0].values.map(h).concat(d)),d3.max(e[0].values.map(c).concat(d))]).range(E||[x,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([e[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-ticks"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){S.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",g).attr("height",x),A.attr("clip-path",m?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-ticks").selectAll(".nv-tick").data(function(e){return e});O.exit().remove();var M=O.enter().append("path").attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"}).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),S.elementMouseover({point:t,series:e[0],pos:[s(u(t,n)),o(a(t,n))],pointIndex:n,seriesIndex:0,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),S.elementMouseout({point:t,series:e[0],pointIndex:n,seriesIndex:0,e:d3.event})}).on("click",function(e,t){S.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){S.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}),d3.transition(O).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"})}),x}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=function(e){return e.open},l=function(e){return e.close},c=function(e){return e.high},h=function(e){return e.low},p=[],d=[],v=!1,m=!0,g=e.utils.defaultColor(),y,b,w,E,S=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return x.dispatch=S,x.options=e.utils.optionsFunc.bind(x),x.x=function(e){return arguments.length?(u=e,x):u},x.y=function(e){return arguments.length?(a=e,x):a},x.open=function(e){return arguments.length?(f=e,x):f},x.close=function(e){return arguments.length?(l=e,x):l},x.high=function(e){return arguments.length?(c=e,x):c},x.low=function(e){return arguments.length?(h=e,x):h},x.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,x):t},x.width=function(e){return arguments.length?(n=e,x):n},x.height=function(e){return arguments.length?(r=e,x):r},x.xScale=function(e){return arguments.length?(s=e,x):s},x.yScale=function(e){return arguments.length?(o=e,x):o},x.xDomain=function(e){return arguments.length?(y=e,x):y},x.yDomain=function(e){return arguments.length?(b=e,x):b},x.xRange=function(e){return arguments.length?(w=e,x):w},x.yRange=function(e){return arguments.length?(E=e,x):E},x.forceX=function(e){return arguments.length?(p=e,x):p},x.forceY=function(e){return arguments.length?(d=e,x):d},x.padData=function(e){return arguments.length?(v=e,x):v},x.clipEdge=function(e){return arguments.length?(m=e,x):m},x.color=function(t){return arguments.length?(g=e.utils.getColor(t),x):g},x.id=function(e){return arguments.length?(i=e,x):i},x},e.models.pie=function(){function S(e){return e.each(function(e){function q(e){var t=(e.startAngle+e.endAngle)*90/Math.PI-90;return t>90?t-180:t}function R(e){e.endAngle=isNaN(e.endAngle)?0:e.endAngle,e.startAngle=isNaN(e.startAngle)?0:e.startAngle,m||(e.innerRadius=0);var t=d3.interpolate(this._current,e);return this._current=t(0),function(e){return A(t(e))}}function U(e){e.innerRadius=0;var t=d3.interpolate({startAngle:0,endAngle:0},e);return function(e){return A(t(e))}}var o=n-t.left-t.right,f=r-t.top-t.bottom,S=Math.min(o,f)/2,x=S-S/5,T=d3.select(this),N=T.selectAll(".nv-wrap.nv-pie").data(e),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-pie nv-chart-"+u),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-pie"),k.append("g").attr("class","nv-pieLabels"),N.attr("transform","translate("+t.left+","+t.top+")"),L.select(".nv-pie").attr("transform","translate("+o/2+","+f/2+")"),L.select(".nv-pieLabels").attr("transform","translate("+o/2+","+f/2+")"),T.on("click",function(e,t){E.chartClick({data:e,index:t,pos:d3.event,id:u})});var A=d3.svg.arc().outerRadius(x);y&&A.startAngle(y),b&&A.endAngle(b),m&&A.innerRadius(S*w);var O=d3.layout.pie().sort(null).value(function(e){return e.disabled?0:s(e)}),M=N.select(".nv-pie").selectAll(".nv-slice").data(O),_=N.select(".nv-pieLabels").selectAll(".nv-label").data(O);M.exit().remove(),_.exit().remove();var D=M.enter().append("g").attr("class","nv-slice").on("mouseover",function(e,t){d3.select(this).classed("hover",!0),E.elementMouseover({label:i(e.data),value:s(e.data),point:e.data,pointIndex:t,pos:[d3.event.pageX,d3.event.pageY],id:u})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),E.elementMouseout({label:i(e.data),value:s(e.data),point:e.data,index:t,id:u})}).on("click",function(e,t){E.elementClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()}).on("dblclick",function(e,t){E.elementDblClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()});M.attr("fill",function(e,t){return a(e,t)}).attr("stroke",function(e,t){return a(e,t)});var P=D.append("path").each(function(e){this._current=e});M.select("path").attr("d",A);if(l){var H=d3.svg.arc().innerRadius(0);c&&(H=A),h&&(H=d3.svg.arc().outerRadius(A.outerRadius())),_.enter().append("g").classed("nv-label",!0).each(function(e,t){var n=d3.select(this);n.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}return e.outerRadius=S+10,e.innerRadius=S+15,"translate("+H.centroid(e)+")"}),n.append("rect").style("stroke","#fff").style("fill","#fff").attr("rx",3).attr("ry",3),n.append("text").style("text-anchor",g?(e.startAngle+e.endAngle)/2<Math.PI?"start":"end":"middle").style("fill","#000")});var B={},j=14,F=140,I=function(e){return Math.floor(e[0]/F)*F+","+Math.floor(e[1]/j)*j};_.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}e.outerRadius=S+10,e.innerRadius=S+15;var n=H.centroid(e),r=I(n);return B[r]&&(n[1]-=j),B[I(n)]=!0,"translate("+n+")"}),_.select(".nv-label text").style("text-anchor",g?(d.startAngle+d.endAngle)/2<Math.PI?"start":"end":"middle").text(function(e,t){var n=(e.endAngle-e.startAngle)/(2*Math.PI),r={key:i(e.data),value:s(e.data),percent:d3.format("%")(n)};return e.value&&n>v?r[p]:""})}}),S}var t={top:0,right:0,bottom:0,left:0},n=500,r=500,i=function(e){return e.x},s=function(e){return e.y},o=function(e){return e.description},u=Math.floor(Math.random()*1e4),a=e.utils.defaultColor(),f=d3.format(",.2f"),l=!0,c=!0,h=!1,p="key",v=.02,m=!1,g=!1,y=!1,b=!1,w=.5,E=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return S.dispatch=E,S.options=e.utils.optionsFunc.bind(S),S.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,S):t},S.width=function(e){return arguments.length?(n=e,S):n},S.height=function(e){return arguments.length?(r=e,S):r},S.values=function(t){return e.log("pie.values() is no longer supported."),S},S.x=function(e){return arguments.length?(i=e,S):i},S.y=function(e){return arguments.length?(s=d3.functor(e),S):s},S.description=function(e){return arguments.length?(o=e,S):o},S.showLabels=function(e){return arguments.length?(l=e,S):l},S.labelSunbeamLayout=function(e){return arguments.length?(g=e,S):g},S.donutLabelsOutside=function(e){return arguments.length?(h=e,S):h},S.pieLabelsOutside=function(e){return arguments.length?(c=e,S):c},S.labelType=function(e){return arguments.length?(p=e,p=p||"key",S):p},S.donut=function(e){return arguments.length?(m=e,S):m},S.donutRatio=function(e){return arguments.length?(w=e,S):w},S.startAngle=function(e){return arguments.length?(y=e,S):y},S.endAngle=function(e){return arguments.length?(b=e,S):b},S.id=function(e){return arguments.length?(u=e,S):u},S.color=function(t){return arguments.length?(a=e.utils.getColor(t),S):a},S.valueFormat=function(e){return arguments.length?(f=e,S):f},S.labelThreshold=function(e){return arguments.length?(v=e,S):v},S},e.models.pieChart=function(){function v(e){return e.each(function(e){var u=d3.select(this),a=this,f=(i||parseInt(u.style("width"))||960)-r.left-r.right,d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom;v.update=function(){u.call(v)},v.container=this,l.disabled=e.map(function(e){return!!e.disabled});if(!c){var m;c={};for(m in l)l[m]instanceof Array?c[m]=l[m].slice(0):c[m]=l[m]}if(!e||!e.length){var g=u.selectAll(".nv-noData").data([h]);return g.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),g.attr("x",r.left+f/2).attr("y",r.top+d/2).text(function(e){return e}),v}u.selectAll(".nv-noData").remove();var y=u.selectAll("g.nv-wrap.nv-pieChart").data([e]),b=y.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),w=y.select("g");b.append("g").attr("class","nv-pieWrap"),b.append("g").attr("class","nv-legendWrap"),o&&(n.width(f).key(t.x()),y.select(".nv-legendWrap").datum(e).call(n),r.top!=n.height()&&(r.top=n.height(),d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom),y.select(".nv-legendWrap").attr("transform","translate(0,"+ -r.top+")")),y.attr("transform","translate("+r.left+","+r.top+")"),t.width(f).height(d);var E=w.select(".nv-pieWrap").datum([e]);d3.transition(E).call(t),n.dispatch.on("stateChange",function(e){l=e,p.stateChange(l),v.update()}),t.dispatch.on("elementMouseout.tooltip",function(e){p.tooltipHide(e)}),p.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),l.disabled=t.disabled),v.update()})}),v}var t=e.models.pie(),n=e.models.legend(),r={top:30,right:20,bottom:20,left:20},i=null,s=null,o=!0,u=e.utils.defaultColor(),a=!0,f=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+t+"</p>"},l={},c=null,h="No Data Available.",p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),d=function(n,r){var i=t.description()(n.point)||t.x()(n.point),s=n.pos[0]+(r&&r.offsetLeft||0),o=n.pos[1]+(r&&r.offsetTop||0),u=t.valueFormat()(t.y()(n.point)),a=f(i,u,n,v);e.tooltip.show([s,o],a,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+r.left,e.pos[1]+r.top],p.tooltipShow(e)}),p.on("tooltipShow",function(e){a&&d(e)}),p.on("tooltipHide",function(){a&&e.tooltip.cleanup()}),v.legend=n,v.dispatch=p,v.pie=t,d3.rebind(v,t,"valueFormat","values","x","y","description","id","showLabels","donutLabelsOutside","pieLabelsOutside","labelType","donut","donutRatio","labelThreshold"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(r.top=typeof e.top!="undefined"?e.top:r.top,r.right=typeof e.right!="undefined"?e.right:r.right,r.bottom=typeof e.bottom!="undefined"?e.bottom:r.bottom,r.left=typeof e.left!="undefined"?e.left:r.left,v):r},v.width=function(e){return arguments.length?(i=e,v):i},v.height=function(e){return arguments.length?(s=e,v):s},v.color=function(r){return arguments.length?(u=e.utils.getColor(r),n.color(u),t.color(u),v):u},v.showLegend=function(e){return arguments.length?(o=e,v):o},v.tooltips=function(e){return arguments.length?(a=e,v):a},v.tooltipContent=function(e){return arguments.length?(f=e,v):f},v.state=function(e){return arguments.length?(l=e,v):l},v.defaultState=function(e){return arguments.length?(c=e,v):c},v.noData=function(e){return arguments.length?(h=e,v):h},v},e.models.scatter=function(){function I(q){return q.each(function(I){function Q(){if(!g)return!1;var e,i=d3.merge(I.map(function(e,t){return e.values.map(function(e,n){var r=f(e,n),i=l(e,n);return[o(r)+Math.random()*1e-7,u(i)+Math.random()*1e-7,t,n,e]}).filter(function(e,t){return b(e[4],t)})}));if(D===!0){if(x){var a=X.select("defs").selectAll(".nv-point-clips").data([s]).enter();a.append("clipPath").attr("class","nv-point-clips").attr("id","nv-points-clip-"+s);var c=X.select("#nv-points-clip-"+s).selectAll("circle").data(i);c.enter().append("circle").attr("r",T),c.exit().remove(),c.attr("cx",function(e){return e[0]}).attr("cy",function(e){return e[1]}),X.select(".nv-point-paths").attr("clip-path","url(#nv-points-clip-"+s+")")}i.length&&(i.push([o.range()[0]-20,u.range()[0]-20,null,null]),i.push([o.range()[1]+20,u.range()[1]+20,null,null]),i.push([o.range()[0]-20,u.range()[0]+20,null,null]),i.push([o.range()[1]+20,u.range()[1]-20,null,null]));var h=d3.geom.polygon([[-10,-10],[-10,r+10],[n+10,r+10],[n+10,-10]]),p=d3.geom.voronoi(i).map(function(e,t){return{data:h.clip(e),series:i[t][2],point:i[t][3]}}),d=X.select(".nv-point-paths").selectAll("path").data(p);d.enter().append("path").attr("class",function(e,t){return"nv-path-"+t}),d.exit().remove(),d.attr("d",function(e){return e.data.length===0?"M 0 0":"M"+e.data.join("L")+"Z"});var v=function(e,n){if(F)return 0;var r=I[e.series];if(typeof r=="undefined")return;var i=r.values[e.point];n({point:i,series:r,pos:[o(f(i,e.point))+t.left,u(l(i,e.point))+t.top],seriesIndex:e.series,pointIndex:e.point})};d.on("click",function(e){v(e,_.elementClick)}).on("mouseover",function(e){v(e,_.elementMouseover)}).on("mouseout",function(e,t){v(e,_.elementMouseout)})}else X.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementClick({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseover",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementMouseover({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseout",function(e,t){if(F||!I[e.series])return 0;var n=I[e.series],r=n.values[t];_.elementMouseout({point:r,series:n,seriesIndex:e.series,pointIndex:t})});F=!1}var q=n-t.left-t.right,R=r-t.top-t.bottom,U=d3.select(this);I.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var W=N&&C&&A?[]:d3.merge(I.map(function(e){return e.values.map(function(e,t){return{x:f(e,t),y:l(e,t),size:c(e,t)}})}));o.domain(N||d3.extent(W.map(function(e){return e.x}).concat(d))),w&&I[0]?o.range(k||[(q*E+q)/(2*I[0].values.length),q-q*(1+E)/(2*I[0].values.length)]):o.range(k||[0,q]),u.domain(C||d3.extent(W.map(function(e){return e.y}).concat(v))).range(L||[R,0]),a.domain(A||d3.extent(W.map(function(e){return e.size}).concat(m))).range(O||[16,256]);if(o.domain()[0]===o.domain()[1]||u.domain()[0]===u.domain()[1])M=!0;o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]-o.domain()[0]*.01,o.domain()[1]+o.domain()[1]*.01]):o.domain([-1,1])),u.domain()[0]===u.domain()[1]&&(u.domain()[0]?u.domain([u.domain()[0]-u.domain()[0]*.01,u.domain()[1]+u.domain()[1]*.01]):u.domain([-1,1])),isNaN(o.domain()[0])&&o.domain([-1,1]),isNaN(u.domain()[0])&&u.domain([-1,1]),P=P||o,H=H||u,B=B||a;var X=U.selectAll("g.nv-wrap.nv-scatter").data([I]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+s+(M?" nv-single-point":"")),$=V.append("defs"),J=V.append("g"),K=X.select("g");J.append("g").attr("class","nv-groups"),J.append("g").attr("class","nv-point-paths"),X.attr("transform","translate("+t.left+","+t.top+")"),$.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),X.select("#nv-edge-clip-"+s+" rect").attr("width",q).attr("height",R>0?R:0),K.attr("clip-path",S?"url(#nv-edge-clip-"+s+")":""),F=!0;var G=X.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});G.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),G.exit().remove(),G.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),G.style("fill",function(e,t){return i(e,t)}).style("stroke",function(e,t){return i(e,t)}).style("stroke-opacity",1).style("fill-opacity",.5);if(p){var Y=G.selectAll("circle.nv-point").data(function(e){return e.values},y);Y.enter().append("circle").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("cx",function(t,n){return e.utils.NaNtoZero(P(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(H(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)}),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)})}else{var Y=G.selectAll("path.nv-point").data(function(e){return e.values});Y.enter().append("path").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("transform",function(e,t){return"translate("+P(f(e,t))+","+H(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))})),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))}))}clearTimeout(j),j=setTimeout(Q,300),P=o.copy(),H=u.copy(),B=a.copy()}),I}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=d3.scale.linear(),u=d3.scale.linear(),a=d3.scale.linear(),f=function(e){return e.x},l=function(e){return e.y},c=function(e){return e.size||1},h=function(e){return e.shape||"circle"},p=!0,d=[],v=[],m=[],g=!0,y=null,b=function(e){return!e.notActive},w=!1,E=.1,S=!1,x=!0,T=function(){return 25},N=null,C=null,k=null,L=null,A=null,O=null,M=!1,_=d3.dispatch("elementClick","elementMouseover","elementMouseout"),D=!0,P,H,B,j,F=!1;return I.clearHighlights=function(){d3.selectAll(".nv-chart-"+s+" .nv-point.hover").classed("hover",!1)},I.highlightPoint=function(e,t,n){d3.select(".nv-chart-"+s+" .nv-series-"+e+" .nv-point-"+t).classed("hover",n)},_.on("elementMouseover.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!0)}),_.on("elementMouseout.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!1)}),I.dispatch=_,I.options=e.utils.optionsFunc.bind(I),I.x=function(e){return arguments.length?(f=d3.functor(e),I):f},I.y=function(e){return arguments.length?(l=d3.functor(e),I):l},I.size=function(e){return arguments.length?(c=d3.functor(e),I):c},I.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,I):t},I.width=function(e){return arguments.length?(n=e,I):n},I.height=function(e){return arguments.length?(r=e,I):r},I.xScale=function(e){return arguments.length?(o=e,I):o},I.yScale=function(e){return arguments.length?(u=e,I):u},I.zScale=function(e){return arguments.length?(a=e,I):a},I.xDomain=function(e){return arguments.length?(N=e,I):N},I.yDomain=function(e){return arguments.length?(C=e,I):C},I.sizeDomain=function(e){return arguments.length?(A=e,I):A},I.xRange=function(e){return arguments.length?(k=e,I):k},I.yRange=function(e){return arguments.length?(L=e,I):L},I.sizeRange=function(e){return arguments.length?(O=e,I):O},I.forceX=function(e){return arguments.length?(d=e,I):d},I.forceY=function(e){return arguments.length?(v=e,I):v},I.forceSize=function(e){return arguments.length?(m=e,I):m},I.interactive=function(e){return arguments.length?(g=e,I):g},I.pointKey=function(e){return arguments.length?(y=e,I):y},I.pointActive=function(e){return arguments.length?(b=e,I):b},I.padData=function(e){return arguments.length?(w=e,I):w},I.padDataOuter=function(e){return arguments.length?(E=e,I):E},I.clipEdge=function(e){return arguments.length?(S=e,I):S},I.clipVoronoi=function(e){return arguments.length?(x=e,I):x},I.useVoronoi=function(e){return arguments.length?(D=e,D===!1&&(x=!1),I):D},I.clipRadius=function(e){return arguments.length?(T=e,I):T},I.color=function(t){return arguments.length?(i=e.utils.getColor(t),I):i},I.shape=function(e){return arguments.length?(h=e,I):h},I.onlyCircles=function(e){return arguments.length?(p=e,I):p},I.id=function(e){return arguments.length?(s=e,I):s},I.singlePoint=function(e){return arguments.length?(M=e,I):M},I},e.models.scatterChart=function(){function F(e){return e.each(function(e){function J(){if(T)return W.select(".nv-point-paths").style("pointer-events","all"),!1;W.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(x).focus(i[0]),p.distortion(x).focus(i[1]),W.select(".nv-scatterWrap").call(t),b&&W.select(".nv-x.nv-axis").call(n),w&&W.select(".nv-y.nv-axis").call(r),W.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),W.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var C=d3.select(this),k=this,L=(f||parseInt(C.style("width"))||960)-a.left-a.right,D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom;F.update=function(){C.call(F)},F.container=this,A.disabled=e.map(function(e){return!!e.disabled});if(!O){var I;O={};for(I in A)A[I]instanceof Array?O[I]=A[I].slice(0):O[I]=A[I]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=C.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",a.left+L/2).attr("y",a.top+D/2).text(function(e){return e}),F}C.selectAll(".nv-noData").remove(),P=P||h,H=H||p;var R=C.selectAll("g.nv-wrap.nv-scatterChart").data([e]),U=R.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),z=U.append("g"),W=R.select("g");z.append("rect").attr("class","nvd3 nv-background"),z.append("g").attr("class","nv-x nv-axis"),z.append("g").attr("class","nv-y nv-axis"),z.append("g").attr("class","nv-scatterWrap"),z.append("g").attr("class","nv-distWrap"),z.append("g").attr("class","nv-legendWrap"),z.append("g").attr("class","nv-controlsWrap");if(y){var X=S?L/2:L;i.width(X),R.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom),R.select(".nv-legendWrap").attr("transform","translate("+(L-X)+","+ -a.top+")")}S&&(s.width(180).color(["#444"]),W.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -a.top+")").call(s)),R.attr("transform","translate("+a.left+","+a.top+")"),E&&W.select(".nv-y.nv-axis").attr("transform","translate("+L+",0)"),t.width(L).height(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),d!==0&&t.xDomain(null),v!==0&&t.yDomain(null),R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t);if(d!==0){var V=h.domain()[1]-h.domain()[0];t.xDomain([h.domain()[0]-d*V,h.domain()[1]+d*V])}if(v!==0){var $=p.domain()[1]-p.domain()[0];t.yDomain([p.domain()[0]-v*$,p.domain()[1]+v*$])}(v!==0||d!==0)&&R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),b&&(n.scale(h).ticks(n.ticks()&&n.ticks().length?n.ticks():L/100).tickSize(-D,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),w&&(r.scale(p).ticks(r.ticks()&&r.ticks().length?r.ticks():D/36).tickSize(-L,0),W.select(".nv-y.nv-axis").call(r)),m&&(o.getData(t.x()).scale(h).width(L).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),W.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),g&&(u.getData(t.y()).scale(p).width(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),W.select(".nv-distributionY").attr("transform","translate("+(E?L:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(W.select(".nv-background").attr("width",L).attr("height",D),W.select(".nv-background").on("mousemove",J),W.select(".nv-background").on("click",function(){T=!T}),t.dispatch.on("elementClick.freezeFisheye",function(){T=!T})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,x=e.disabled?0:2.5,W.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),W.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(x).focus(0),p.distortion(x).focus(0),W.select(".nv-scatterWrap").call(t),W.select(".nv-x.nv-axis").call(n),W.select(".nv-y.nv-axis").call(r)):T=!1,F.update()}),i.dispatch.on("stateChange",function(e){A.disabled=e.disabled,M.stateChange(A),F.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",function(t,n){return e.pos[1]-D}),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],M.tooltipShow(e)}),M.on("tooltipShow",function(e){N&&B(e,k.parentNode)}),M.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),A.disabled=t.disabled),F.update()}),P=h.copy(),H=p.copy()}),F}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=0,v=0,m=!1,g=!1,y=!0,b=!0,w=!0,E=!1,S=!!d3.fisheye,x=0,T=!1,N=!0,C=function(e,t,n){return"<strong>"+t+"</strong>"},k=function(e,t,n){return"<strong>"+n+"</strong>"},L=null,A={},O=null,M=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),_="No Data Available.",D=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(E?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var P,H,B=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));C!=null&&e.tooltip.show([f,l],C(i.series.key,v,m,i,F),"n",1,s,"x-nvtooltip"),k!=null&&e.tooltip.show([c,d],k(i.series.key,v,m,i,F),"e",1,s,"y-nvtooltip"),L!=null&&e.tooltip.show([o,u],L(i.series.key,v,m,i,F),i.value<0?"n":"s",null,s)},j=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){M.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),M.on("tooltipHide",function(){N&&e.tooltip.cleanup()}),F.dispatch=M,F.scatter=t,F.legend=i,F.controls=s,F.xAxis=n,F.yAxis=r,F.distX=o,F.distY=u,d3.rebind(F,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),F.options=e.utils.optionsFunc.bind(F),F.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,F):a},F.width=function(e){return arguments.length?(f=e,F):f},F.height=function(e){return arguments.length?(l=e,F):l},F.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),F):c},F.showDistX=function(e){return arguments.length?(m=e,F):m},F.showDistY=function(e){return arguments.length?(g=e,F):g},F.showControls=function(e){return arguments.length?(S=e,F):S},F.showLegend=function(e){return arguments.length?(y=e,F):y},F.showXAxis=function(e){return arguments.length?(b=e,F):b},F.showYAxis=function(e){return arguments.length?(w=e,F):w},F.rightAlignYAxis=function(e){return arguments.length?(E=e,r.orient(e?"right":"left"),F):E},F.fisheye=function(e){return arguments.length?(x=e,F):x},F.xPadding=function(e){return arguments.length?(d=e,F):d},F.yPadding=function(e){return arguments.length?(v=e,F):v},F.tooltips=function(e){return arguments.length?(N=e,F):N},F.tooltipContent=function(e){return arguments.length?(L=e,F):L},F.tooltipXContent=function(e){return arguments.length?(C=e,F):C},F.tooltipYContent=function(e){return arguments.length?(k=e,F):k},F.state=function(e){return arguments.length?(A=e,F):A},F.defaultState=function(e){return arguments.length?(O=e,F):O},F.noData=function(e){return arguments.length?(_=e,F):_},F.transitionDuration=function(e){return arguments.length?(D=e,F):D},F},e.models.scatterPlusLineChart=function(){function B(e){return e.each(function(e){function V(){if(S)return U.select(".nv-point-paths").style("pointer-events","all"),!1;U.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(E).focus(i[0]),p.distortion(E).focus(i[1]),U.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),g&&U.select(".nv-x.nv-axis").call(n),y&&U.select(".nv-y.nv-axis").call(r),U.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),U.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var T=d3.select(this),N=this,C=(f||parseInt(T.style("width"))||960)-a.left-a.right,M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom;B.update=function(){T.call(B)},B.container=this,k.disabled=e.map(function(e){return!!e.disabled});if(!L){var j;L={};for(j in k)k[j]instanceof Array?L[j]=k[j].slice(0):L[j]=k[j]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var F=T.selectAll(".nv-noData").data([O]);return F.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),F.attr("x",a.left+C/2).attr("y",a.top+M/2).text(function(e){return e}),B}T.selectAll(".nv-noData").remove(),h=t.xScale(),p=t.yScale(),_=_||h,D=D||p;var I=T.selectAll("g.nv-wrap.nv-scatterChart").data([e]),q=I.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),R=q.append("g"),U=I.select("g");R.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-scatterWrap"),R.append("g").attr("class","nv-regressionLinesWrap"),R.append("g").attr("class","nv-distWrap"),R.append("g").attr("class","nv-legendWrap"),R.append("g").attr("class","nv-controlsWrap"),I.attr("transform","translate("+a.left+","+a.top+")"),b&&U.select(".nv-y.nv-axis").attr("transform","translate("+C+",0)"),m&&(i.width(C/2),I.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom),I.select(".nv-legendWrap").attr("transform","translate("+C/2+","+ -a.top+")")),w&&(s.width(180).color(["#444"]),U.select(".nv-controlsWrap").datum(H).attr("transform","translate(0,"+ -a.top+")").call(s)),t.width(C).height(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),I.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),I.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+t.id()+")");var z=I.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(e){return e});z.enter().append("g").attr("class","nv-regLines");var W=z.selectAll(".nv-regLine").data(function(e){return[e]}),X=W.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0);W.attr("x1",h.range()[0]).attr("x2",h.range()[1]).attr("y1",function(e,t){return p(h.domain()[0]*e.slope+e.intercept)}).attr("y2",function(e,t){return p(h.domain()[1]*e.slope+e.intercept)}).style("stroke",function(e,t,n){return c(e,n)}).style("stroke-opacity",function(e,t){return e.disabled||typeof e.slope=="undefined"||typeof e.intercept=="undefined"?0:1}),g&&(n.scale(h).ticks(n.ticks()?n.ticks():C/100).tickSize(-M,0),U.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),y&&(r.scale(p).ticks(r.ticks()?r.ticks():M/36).tickSize(-C,0),U.select(".nv-y.nv-axis").call(r)),d&&(o.getData(t.x()).scale(h).width(C).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),U.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),v&&(u.getData(t.y()).scale(p).width(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),U.select(".nv-distributionY").attr("transform","translate("+(b?C:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(U.select(".nv-background").attr("width",C).attr("height",M),U.select(".nv-background").on("mousemove",V),U.select(".nv-background").on("click",function(){S=!S}),t.dispatch.on("elementClick.freezeFisheye",function(){S=!S})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,E=e.disabled?0:2.5,U.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),U.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(E).focus(0),p.distortion(E).focus(0),U.select(".nv-scatterWrap").call(t),U.select(".nv-x.nv-axis").call(n),U.select(".nv-y.nv-axis").call(r)):S=!1,B.update()}),i.dispatch.on("stateChange",function(e){k=e,A.stateChange(k),B.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",e.pos[1]-M),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],A.tooltipShow(e)}),A.on("tooltipShow",function(e){x&&P(e,N.parentNode)}),A.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),k.disabled=t.disabled),B.update()}),_=h.copy(),D=p.copy()}),B}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=!1,v=!1,m=!0,g=!0,y=!0,b=!1,w=!!d3.fisheye,E=0,S=!1,x=!0,T=function(e,t,n){return"<strong>"+t+"</strong>"},N=function(e,t,n){return"<strong>"+n+"</strong>"},C=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+r+"</p>"},k={},L=null,A=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),O="No Data Available.",M=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(b?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var _,D,P=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));T!=null&&e.tooltip.show([f,l],T(i.series.key,v,m,i,B),"n",1,s,"x-nvtooltip"),N!=null&&e.tooltip.show([c,d],N(i.series.key,v,m,i,B),"e",1,s,"y-nvtooltip"),C!=null&&e.tooltip.show([o,u],C(i.series.key,v,m,i.point.tooltip,i,B),i.value<0?"n":"s",null,s)},H=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){A.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),A.on("tooltipHide",function(){x&&e.tooltip.cleanup()}),B.dispatch=A,B.scatter=t,B.legend=i,B.controls=s,B.xAxis=n,B.yAxis=r,B.distX=o,B.distY=u,d3.rebind(B,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),B.options=e.utils.optionsFunc.bind(B),B.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,B):a},B.width=function(e){return arguments.length?(f=e,B):f},B.height=function(e){return arguments.length?(l=e,B):l},B.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),B):c},B.showDistX=function(e){return arguments.length?(d=e,B):d},B.showDistY=function(e){return arguments.length?(v=e,B):v},B.showControls=function(e){return arguments.length?(w=e,B):w},B.showLegend=function(e){return arguments.length?(m=e,B):m},B.showXAxis=function(e){return arguments.length?(g=e,B):g},B.showYAxis=function(e){return arguments.length?(y=e,B):y},B.rightAlignYAxis=function(e){return arguments.length?(b=e,r.orient(e?"right":"left"),B):b},B.fisheye=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(x=e,B):x},B.tooltipContent=function(e){return arguments.length?(C=e,B):C},B.tooltipXContent=function(e){return arguments.length?(T=e,B):T},B.tooltipYContent=function(e){return arguments.length?(N=e,B):N},B.state=function(e){return arguments.length?(k=e,B):k},B.defaultState=function(e){return arguments.length?(L=e,B):L},B.noData=function(e){return arguments.length?(O=e,B):O},B.transitionDuration=function(e){return arguments.length?(M=e,B):M},B},e.models.sparkline=function(){function d(e){return e.each(function(e){var i=n-t.left-t.right,d=r-t.top-t.bottom,v=d3.select(this);s.domain(l||d3.extent(e,u)).range(h||[0,i]),o.domain(c||d3.extent(e,a)).range(p||[d,0]);var m=v.selectAll("g.nv-wrap.nv-sparkline").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline"),b=g.append("g"),w=m.select("g");m.attr("transform","translate("+t.left+","+t.top+")");var E=m.selectAll("path").data(function(e){return[e]});E.enter().append("path"),E.exit().remove(),E.style("stroke",function(e,t){return e.color||f(e,t)}).attr("d",d3.svg.line().x(function(e,t){return s(u(e,t))}).y(function(e,t){return o(a(e,t))}));var S=m.selectAll("circle.nv-point").data(function(e){function n(t){if(t!=-1){var n=e[t];return n.pointIndex=t,n}return null}var t=e.map(function(e,t){return a(e,t)}),r=n(t.lastIndexOf(o.domain()[1])),i=n(t.indexOf(o.domain()[0])),s=n(t.length-1);return[i,r,s].filter(function(e){return e!=null})});S.enter().append("circle"),S.exit().remove(),S.attr("cx",function(e,t){return s(u(e,e.pointIndex))}).attr("cy",function(e,t){return o(a(e,e.pointIndex))}).attr("r",2).attr("class",function(e,t){return u(e,e.pointIndex)==s.domain()[1]?"nv-point nv-currentValue":a(e,e.pointIndex)==o.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),d}var t={top:2,right:0,bottom:2,left:0},n=400,r=32,i=!0,s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=e.utils.getColor(["#000"]),l,c,h,p;return d.options=e.utils.optionsFunc.bind(d),d.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,d):t},d.width=function(e){return arguments.length?(n=e,d):n},d.height=function(e){return arguments.length?(r=e,d):r},d.x=function(e){return arguments.length?(u=d3.functor(e),d):u},d.y=function(e){return arguments.length?(a=d3.functor(e),d):a},d.xScale=function(e){return arguments.length?(s=e,d):s},d.yScale=function(e){return arguments.length?(o=e,d):o},d.xDomain=function(e){return arguments.length?(l=e,d):l},d.yDomain=function(e){return arguments.length?(c=e,d):c},d.xRange=function(e){return arguments.length?(h=e,d):h},d.yRange=function(e){return arguments.length?(p=e,d):p},d.animate=function(e){return arguments.length?(i=e,d):i},d.color=function(t){return arguments.length?(f=e.utils.getColor(t),d):f},d},e.models.sparklinePlus=function(){function v(e){return e.each(function(c){function O(){if(a)return;var e=C.selectAll(".nv-hoverValue").data(u),r=e.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);e.exit().style("stroke-opacity",0).style("fill-opacity",0).remove(),e.attr("transform",function(e){return"translate("+s(t.x()(c[e],e))+",0)"}).style("stroke-opacity",1).style("fill-opacity",1);if(!u.length)return;r.append("line").attr("x1",0).attr("y1",-n.top).attr("x2",0).attr("y2",b),r.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-n.top).attr("text-anchor","end").attr("dy",".9em"),C.select(".nv-hoverValue .nv-xValue").text(f(t.x()(c[u[0]],u[0]))),r.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-n.top).attr("text-anchor","start").attr("dy",".9em"),C.select(".nv-hoverValue .nv-yValue").text(l(t.y()(c[u[0]],u[0])))}function M(){function r(e,n){var r=Math.abs(t.x()(e[0],0)-n),i=0;for(var s=0;s<e.length;s++)Math.abs(t.x()(e[s],s)-n)<r&&(r=Math.abs(t.x()(e[s],s)-n),i=s);return i}if(a)return;var e=d3.mouse(this)[0]-n.left;u=[r(c,Math.round(s.invert(e)))],O()}var m=d3.select(this),g=(r||parseInt(m.style("width"))||960)-n.left-n.right,b=(i||parseInt(m.style("height"))||400)-n.top-n.bottom;v.update=function(){v(e)},v.container=this;if(!c||!c.length){var w=m.selectAll(".nv-noData").data([d]);return w.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),w.attr("x",n.left+g/2).attr("y",n.top+b/2).text(function(e){return e}),v}m.selectAll(".nv-noData").remove();var E=t.y()(c[c.length-1],c.length-1);s=t.xScale(),o=t.yScale();var S=m.selectAll("g.nv-wrap.nv-sparklineplus").data([c]),T=S.enter().append("g").attr("class","nvd3 nv-wrap nv-sparklineplus"),N=T.append("g"),C=S.select("g");N.append("g").attr("class","nv-sparklineWrap"),N.append("g").attr("class","nv-valueWrap"),N.append("g").attr("class","nv-hoverArea"),S.attr("transform","translate("+n.left+","+n.top+")");var k=C.select(".nv-sparklineWrap");t.width(g).height(b),k.call(t);var L=C.select(".nv-valueWrap"),A=L.selectAll(".nv-currentValue").data([E]);A.enter().append("text").attr("class","nv-currentValue").attr("dx",p?-8:8).attr("dy",".9em").style("text-anchor",p?"end":"start"),A.attr("x",g+(p?n.right:0)).attr("y",h?function(e){return o(e)}:0).style("fill",t.color()(c[c.length-1],c.length-1)).text(l(E)),N.select(".nv-hoverArea").append("rect").on("mousemove",M).on("click",function(){a=!a}).on("mouseout",function(){u=[],O()}),C.select(".nv-hoverArea rect").attr("transform",function(e){return"translate("+ -n.left+","+ -n.top+")"}).attr("width",g+n.left+n.right).attr("height",b+n.top)}),v}var t=e.models.sparkline(),n={top:15,right:100,bottom:10,left:50},r=null,i=null,s,o,u=[],a=!1,f=d3.format(",r"),l=d3.format(",.2f"),c=!0,h=!0,p=!1,d="No Data Available.";return v.sparkline=t,d3.rebind(v,t,"x","y","xScale","yScale","color"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,v):n},v.width=function(e){return arguments.length?(r=e,v):r},v.height=function(e){return arguments.length?(i=e,v):i},v.xTickFormat=function(e){return arguments.length?(f=e,v):f},v.yTickFormat=function(e){return arguments.length?(l=e,v):l},v.showValue=function(e){return arguments.length?(c=e,v):c},v.alignValue=function(e){return arguments.length?(h=e,v):h},v.rightAlignValue=function(e){return arguments.length?(p=e,v):p},v.noData=function(e){return arguments.length?(d=e,v):d},v},e.models.stackedArea=function(){function g(e){return e.each(function(e){var a=n-t.left-t.right,b=r-t.top-t.bottom,w=d3.select(this);p=v.xScale(),d=v.yScale();var E=e;e.forEach(function(e,t){e.seriesIndex=t,e.values=e.values.map(function(e,n){return e.index=n,e.seriesIndex=t,e})});var S=e.filter(function(e){return!e.disabled});e=d3.layout.stack().order(l).offset(f).values(function(e){return e.values}).x(o).y(u).out(function(e,t,n){var r=u(e)===0?0:n;e.display={y:r,y0:t}})(S);var T=w.selectAll("g.nv-wrap.nv-stackedarea").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedarea"),C=N.append("defs"),k=N.append("g"),L=T.select("g");k.append("g").attr("class","nv-areaWrap"),k.append("g").attr("class","nv-scatterWrap"),T.attr("transform","translate("+t.left+","+t.top+")"),v.width(a).height(b).x(o).y(function(e){return e.display.y+e.display.y0}).forceY([0]).color(e.map(function(e,t){return e.color||i(e,e.seriesIndex)}));var A=L.select(".nv-scatterWrap").datum(e);A.call(v),C.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),T.select("#nv-edge-clip-"+s+" rect").attr("width",a).attr("height",b),L.attr("clip-path",h?"url(#nv-edge-clip-"+s+")":"");var O=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y+e.display.y0)}).interpolate(c),M=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y0)}),_=L.select(".nv-areaWrap").selectAll("path.nv-area").data(function(e){return e});_.enter().append("path").attr("class",function(e,t){return"nv-area nv-area-"+t}).attr("d",function(e,t){return M(e.values,e.seriesIndex)}).on("mouseover",function(e,t){d3.select(this).classed("hover",!0),m.areaMouseover({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),m.areaMouseout({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("click",function(e,t){d3.select(this).classed("hover",!1),m.areaClick({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}),_.exit().remove(),_.style("fill",function(e,t){return e.color||i(e,e.seriesIndex)}).style("stroke",function(e,t){return e.color||i(e,e.seriesIndex)}),_.attr("d",function(e,t){return O(e.values,t)}),v.dispatch.on("elementMouseover.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!0)}),v.dispatch.on("elementMouseout.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!1)}),g.d3_stackedOffset_stackPercent=function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,a=[];for(s=0;s<n;++s){for(i=0,o=0;i<E.length;i++)o+=u(E[i].values[s]);if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)a[s]=0;return a}}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=function(e){return e.x},u=function(e){return e.y},a="stack",f="zero",l="default",c="linear",h=!1,p,d,v=e.models.scatter(),m=d3.dispatch("tooltipShow","tooltipHide","areaClick","areaMouseover","areaMouseout");return v.size(2.2).sizeDomain([2.2,2.2]),v.dispatch.on("elementClick.area",function(e){m.areaClick(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],m.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){m.tooltipHide(e)}),g.dispatch=m,g.scatter=v,d3.rebind(g,v,"interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","highlightPoint","clearHighlights"),g.options=e.utils.optionsFunc.bind(g),g.x=function(e){return arguments.length?(o=d3.functor(e),g):o},g.y=function(e){return arguments.length?(u=d3.functor(e),g):u},g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.clipEdge=function(e){return arguments.length?(h=e,g):h},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),g):i},g.offset=function(e){return arguments.length?(f=e,g):f},g.order=function(e){return arguments.length?(l=e,g):l},g.style=function(e){if(!arguments.length)return a;a=e;switch(a){case"stack":g.offset("zero"),g.order("default");break;case"stream":g.offset("wiggle"),g.order("inside-out");break;case"stream-center":g.offset("silhouette"),g.order("inside-out");break;case"expand":g.offset("expand"),g.order("default");break;case"stack_percent":g.offset(g.d3_stackedOffset_stackPercent),g.order("default")}return g},g.interpolate=function(e){return arguments.length?(c=e,g):c},g},e.models.stackedAreaChart=function(){function M(y){return y.each(function(y){var A=d3.select(this),_=this,D=(a||parseInt(A.style("width"))||960)-u.left-u.right,P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom;M.update=function(){A.call(M)},M.container=this,S.disabled=y.map(function(e){return!!e.disabled});if(!x){var H;x={};for(H in S)S[H]instanceof Array?x[H]=S[H].slice(0):x[H]=S[H]}if(!y||!y.length||!y.filter(function(e){return e.values.length}).length){var B=A.selectAll(".nv-noData").data([T]);return B.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),B.attr("x",u.left+D/2).attr("y",u.top+P/2).text(function(e){return e}),M}A.selectAll(".nv-noData").remove(),b=t.xScale(),w=t.yScale();var j=A.selectAll("g.nv-wrap.nv-stackedAreaChart").data([y]),F=j.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),I=j.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-stackedWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-controlsWrap"),F.append("g").attr("class","nv-interactive"),I.select("rect").attr("width",D).attr("height",P);if(h){var q=c?D-C:D;i.width(q),I.select(".nv-legendWrap").datum(y).call(i),u.top!=i.height()&&(u.top=i.height(),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-legendWrap").attr("transform","translate("+(D-q)+","+ -u.top+")")}if(c){var R=[{key:L.stacked||"Stacked",metaKey:"Stacked",disabled:t.style()!="stack",style:"stack"},{key:L.stream||"Stream",metaKey:"Stream",disabled:t.style()!="stream",style:"stream"},{key:L.expanded||"Expanded",metaKey:"Expanded",disabled:t.style()!="expand",style:"expand"},{key:L.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:t.style()!="stack_percent",style:"stack_percent"}];C=k.length/3*260,R=R.filter(function(e){return k.indexOf(e.metaKey)!==-1}),s.width(C).color(["#444","#444","#444"]),I.select(".nv-controlsWrap").datum(R).call(s),u.top!=Math.max(s.height(),i.height())&&(u.top=Math.max(s.height(),i.height()),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-controlsWrap").attr("transform","translate(0,"+ -u.top+")")}j.attr("transform","translate("+u.left+","+u.top+")"),v&&I.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),m&&(o.width(D).height(P).margin({left:u.left,top:u.top}).svgContainer(A).xScale(b),j.select(".nv-interactive").call(o)),t.width(D).height(P);var U=I.select(".nv-stackedWrap").datum(y);U.call(t),p&&(n.scale(b).ticks(D/100).tickSize(-P,0),I.select(".nv-x.nv-axis").attr("transform","translate(0,"+P+")"),I.select(".nv-x.nv-axis").call(n)),d&&(r.scale(w).ticks(t.offset()=="wiggle"?0:P/36).tickSize(-D,0).setTickFormat(t.style()=="expand"||t.style()=="stack_percent"?d3.format("%"):E),I.select(".nv-y.nv-axis").call(r)),t.dispatch.on("areaClick.toggle",function(e){y.filter(function(e){return!e.disabled}).length===1?y.forEach(function(e){e.disabled=!1}):y.forEach(function(t,n){t.disabled=n!=e.seriesIndex}),S.disabled=y.map(function(e){return!!e.disabled}),N.stateChange(S),M.update()}),i.dispatch.on("stateChange",function(e){S.disabled=e.disabled,N.stateChange(S),M.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;R=R.map(function(e){return e.disabled=!0,e}),e.disabled=!1,t.style(e.style),S.style=t.style(),N.stateChange(S),M.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,a,f,c=[];y.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){a=e.interactiveBisect(n.values,i.pointXValue,M.x()),t.highlightPoint(r,a,!0);var o=n.values[a];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof f=="undefined"&&(f=M.xScale()(M.x()(o,a)));var u=t.style()=="expand"?o.display.y:M.y()(o,a);c.push({key:n.key,value:u,color:l(n,n.seriesIndex),stackedValue:o.display})}),c.reverse();if(c.length>2){var h=M.yScale().invert(i.mouseY),p=Infinity,d=null;c.forEach(function(e,t){h=Math.abs(h);var n=Math.abs(e.stackedValue.y0),r=Math.abs(e.stackedValue.y);if(h>=n&&h<=r+n){d=t;return}}),d!=null&&(c[d].highlight=!0)}var v=n.tickFormat()(M.x()(s,a)),m=t.style()=="expand"?function(e,t){return d3.format(".1%")(e)}:function(e,t){return r.tickFormat()(e)};o.tooltip.position({left:f+u.left,top:i.mouseY+u.top}).chartContainer(_.parentNode).enabled(g).valueFormatter(m).data({value:v,series:c})(),o.renderGuideLine(f)}),o.dispatch.on("elementMouseout",function(e){N.tooltipHide(),t.clearHighlights()}),N.on("tooltipShow",function(e){g&&O(e,_.parentNode)}),N.on("changeState",function(e){typeof e.disabled!="undefined"&&y.length===e.disabled.length&&(y.forEach(function(t,n){t.disabled=e.disabled[n]}),S.disabled=e.disabled),typeof e.style!="undefined"&&t.style(e.style),M.update()})}),M}var t=e.models.stackedArea(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:25,bottom:50,left:60},a=null,f=null,l=e.utils.defaultColor(),c=!0,h=!0,p=!0,d=!0,v=!1,m=!1,g=!0,y=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},b,w,E=d3.format(",.2f"),S={style:t.style()},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=250,k=["Stacked","Stream","Expanded"],L={},A=0;n.orient("bottom").tickPadding(7),r.orient(v?"right":"left"),s.updateState(!1);var O=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=y(i.series.key,a,f,i,M);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("tooltipShow",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],N.tooltipShow(e)}),t.dispatch.on("tooltipHide",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){g&&e.tooltip.cleanup()}),M.dispatch=N,M.stacked=t,M.legend=i,M.controls=s,M.xAxis=n,M.yAxis=r,M.interactiveLayer=o,d3.rebind(M,t,"x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","sizeDomain","interactive","useVoronoi","offset","order","style","clipEdge","forceX","forceY","forceSize","interpolate"),M.options=e.utils.optionsFunc.bind(M),M.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,M):u},M.width=function(e){return arguments.length?(a=e,M):a},M.height=function(e){return arguments.length?(f=e,M):f},M.color=function(n){return arguments.length?(l=e.utils.getColor(n),i.color(l),t.color(l),M):l},M.showControls=function(e){return arguments.length?(c=e,M):c},M.showLegend=function(e){return arguments.length?(h=e,M):h},M.showXAxis=function(e){return arguments.length?(p=e,M):p},M.showYAxis=function(e){return arguments.length?(d=e,M):d},M.rightAlignYAxis=function(e){return arguments.length?(v=e,r.orient(e?"right":"left"),M):v},M.useInteractiveGuideline=function(e){return arguments.length?(m=e,e===!0&&(M.interactive(!1),M.useVoronoi(!1)),M):m},M.tooltip=function(e){return arguments.length?(y=e,M):y},M.tooltips=function(e){return arguments.length?(g=e,M):g},M.tooltipContent=function(e){return arguments.length?(y=e,M):y},M.state=function(e){return arguments.length?(S=e,M):S},M.defaultState=function(e){return arguments.length?(x=e,M):x},M.noData=function(e){return arguments.length?(T=e,M):T},M.transitionDuration=function(e){return arguments.length?(A=e,M):A},M.controlsData=function(e){return arguments.length?(k=e,M):k},M.controlLabels=function(e){return arguments.length?typeof e!="object"?L:(L=e,M):L},r.setTickFormat=r.tickFormat,r.tickFormat=function(e){return arguments.length?(E=e,r):E},M}}(),define("plugin/plugins/nvd3/nv.d3",function(){}),define("plugin/charts/nvd3/common/config",["plugin/plugins/nvd3/nv.d3"],function(){return{title:"",category:"",library:"NVD3",tag:"svg",keywords:"small",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},use_panels:{title:"Use multi-panels",info:"Would you like to separate your data into individual panels?",type:"radiobutton",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/nvd3/bar/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked",category:"Bar diagrams",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_horizontal/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Horizontal",category:"Bar diagrams",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}},settings:{x_axis_type:{init:"hide"}}})}),define("plugin/charts/nvd3/bar_horizontal_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked horizontal",category:"Bar diagrams",keywords:"default small",settings:{x_axis_type:{init:"hide"}},columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/line_focus/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line with focus",category:"Others",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/pie/config",["plugin/plugins/nvd3/nv.d3"],function(){return $.extend(!0,{},{title:"Pie chart",category:"Area charts",library:"NVD3",tag:"svg",keywords:"default small",use_panels:!0,columns:{label:{title:"Labels",is_label:!0,is_auto:!0},y:{title:"Values",is_numeric:!0}},settings:{show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},donut_ratio:{title:"Donut ratio",info:"Determine how large the donut hole will be.",type:"select",init:"0.5",data:[{label:"50%",value:"0.5"},{label:"25%",value:"0.25"},{label:"10%",value:"0.10"},{label:"0%",value:"0"}]},label_separator:{type:"separator",title:"Label settings"},label_type:{title:"Donut label",info:"What would you like to show for each slice?",type:"select",init:"percent",data:[{label:"-- Nothing --",value:"hide",hide:"label_outside"},{label:"Label column",value:"key",show:"label_outside"},{label:"Value column",value:"value",show:"label_outside"},{label:"Percentage",value:"percent",show:"label_outside"}]},label_outside:{title:"Show outside",info:"Would you like to show labels outside the donut?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}})}),define("plugin/charts/nvd3/stackedarea_full/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Expanded",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea_stream/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stream",category:"Area charts",zoomable:"axis",keywords:"default small",showmaxmin:!0,columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/histogram/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogram",keywords:"small medium large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{x_axis_label:{init:"Values"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/histogram_discrete/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Discrete Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogramdiscrete",keywords:"small medium large",columns:{x:{title:"Observations",is_label:!0}},settings:{x_axis_label:{init:"Breaks"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/line/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/scatter/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/common/config",[],function(){return{title:"",category:"",library:"JqPlot",tag:"div",keywords:"default medium",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/jqplot/bar/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/line/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/scatter/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/boxplot/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Box plot",category:"Data processing (requires 'charts' tool from Toolshed)",library:"jqPlot",tag:"div",execute:"boxplot",keywords:"default large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},y_axis_grid:{title:"Axis grid",info:"Would you like to show grid lines for this axis?",type:"radiobutton",init:"1",data:[{label:"On",value:"1"},{label:"Off",value:"0"}]}}})}),define("plugin/charts/types",["plugin/charts/nvd3/bar/config","plugin/charts/nvd3/bar_stacked/config","plugin/charts/nvd3/bar_horizontal/config","plugin/charts/nvd3/bar_horizontal_stacked/config","plugin/charts/nvd3/line_focus/config","plugin/charts/nvd3/pie/config","plugin/charts/nvd3/stackedarea_full/config","plugin/charts/nvd3/stackedarea_stream/config","plugin/charts/nvd3/histogram/config","plugin/charts/nvd3/histogram_discrete/config","plugin/charts/nvd3/line/config","plugin/charts/nvd3/scatter/config","plugin/charts/nvd3/stackedarea/config","plugin/charts/jqplot/bar/config","plugin/charts/jqplot/line/config","plugin/charts/jqplot/scatter/config","plugin/charts/jqplot/boxplot/config"],function(e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m){return Backbone.Model.extend({defaults:{jqplot_bar:p,nvd3_bar:e,nvd3_bar_stacked:t,nvd3_bar_horizontal:n,nvd3_bar_horizontal_stacked:r,nvd3_line_focus:i,nvd3_stackedarea:h,nvd3_stackedarea_full:o,nvd3_stackedarea_stream:u,nvd3_pie:s,nvd3_line:l,nvd3_scatter:c,nvd3_histogram:a,nvd3_histogram_discrete:f,jqplot_line:d,jqplot_scatter:v}})}),define("plugin/app",["mvc/ui/ui-modal","mvc/ui/ui-portlet","plugin/library/ui","utils/utils","plugin/library/jobs","plugin/library/datasets","plugin/library/storage","plugin/views/viewer","plugin/views/editor","plugin/models/config","plugin/models/chart","plugin/charts/types"],function(e,t,n,r,i,s,o,u,a,f,l,c){return Backbone.View.extend({initialize:function(t){this.options=t,Galaxy&&Galaxy.modal?this.modal=Galaxy.modal:this.modal=new e.View,this.config=new f,this.types=new c,this.chart=new l,this.jobs=new i(this),this.datasets=new s(this),this.storage=new o(this),this.viewer_view=new u(this),this.editor_view=new a(this),this.$el.append(this.viewer_view.$el),this.$el.append(this.editor_view.$el);if(!this.storage.load())this.go("editor");else{this.go("viewer");var n=this;this.chart.deferred.execute(function(){n.chart.trigger("redraw")})}},go:function(e){$(".tooltip").hide();switch(e){case"editor":this.editor_view.show(),this.viewer_view.hide();break;case"viewer":this.editor_view.hide(),this.viewer_view.show()}},chartPath:function(e){var t=e.split(/_(.+)/);return t.length>=2?t[0]+"/"+t[1]:(console.debug("FAILED App:chartPath() - Invalid format: "+e),undefined)},execute:function(e){},onunload:function(){},log:function(e,t){console.log(e+" "+t)}})});
\ No newline at end of file
diff -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f -r 0ed41ad6e8b803867947c4d28daef882cf411773 config/plugins/visualizations/charts/static/charts/nvd3/histogram/config.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/histogram/config.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/histogram/config.js
@@ -5,7 +5,7 @@
title : 'Histogram',
category : 'Data processing (requires \'charts\' tool from Toolshed)',
execute : 'histogram',
- keywords : 'default large',
+ keywords : 'small medium large',
columns : {
y : {
title : 'Observations',
diff -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f -r 0ed41ad6e8b803867947c4d28daef882cf411773 config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/config.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/config.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/config.js
@@ -4,7 +4,7 @@
title : 'Discrete Histogram',
category : 'Data processing (requires \'charts\' tool from Toolshed)',
execute : 'histogramdiscrete',
- keywords : 'default large',
+ keywords : 'small medium large',
columns : {
x : {
title : 'Observations',
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: Charts: Add jqplots boxplot plugin, fix chart type selection filter, add png export for canvas-based chart types
by commits-noreply@bitbucket.org 10 Jun '14
by commits-noreply@bitbucket.org 10 Jun '14
10 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/1682d8dbf493/
Changeset: 1682d8dbf493
User: guerler
Date: 2014-06-10 11:43:19
Summary: Charts: Add jqplots boxplot plugin, fix chart type selection filter, add png export for canvas-based chart types
Affected #: 32 files
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/build-app.js
--- a/config/plugins/visualizations/charts/static/build-app.js
+++ b/config/plugins/visualizations/charts/static/build-app.js
@@ -3,4 +3,4 @@
// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore may be freely distributed under the MIT license.
-define("mvc/ui/ui-modal",[],function(){var e=Backbone.View.extend({elMain:"body",optionsDefault:{title:"ui-modal",body:"",backdrop:!0,height:null,width:null,closing_events:!1,closing_callback:null},buttonList:{},initialize:function(e){e&&this._create(e)},show:function(e){this.initialize(e),this.options.height?(this.$body.css("height",this.options.height),this.$body.css("overflow","hidden")):this.$body.css("max-height",$(window).height()/2),this.options.width&&this.$dialog.css("width",this.options.width),this.visible?this.$el.show():this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.visible=!1,this.$el.fadeOut("fast"),this.options.closing_callback&&this.options.closing_callback()},enableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!0)},showButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).show()},hideButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).hide()},getButton:function(e){var t=this.buttonList[e];return this.$buttons.find("#"+t)},scrollTop:function(){return this.$body.scrollTop()},_create:function(e){var t=this;this.options=_.defaults(e,this.optionsDefault),this.options.body=="progress"&&(this.options.body=$('<div class="progress progress-striped active"><div class="progress-bar progress-bar-info" style="width:100%"></div></div>')),this.$el&&(this.$el.remove(),$(document).off("keyup.ui-modal")),this.setElement(this._template(this.options.title)),this.$dialog=this.$el.find(".modal-dialog"),this.$body=this.$el.find(".modal-body"),this.$footer=this.$el.find(".modal-footer"),this.$buttons=this.$el.find(".buttons"),this.$backdrop=this.$el.find(".modal-backdrop"),this.$body.html(this.options.body),this.options.backdrop||this.$backdrop.removeClass("in");if(this.options.buttons){this.buttonList={};var n=0;$.each(this.options.buttons,function(e,r){var i="button-"+n++;t.$buttons.append($('<button id="'+i+'"></button>').text(e).click(r)).append(" "),t.buttonList[e]=i})}else this.$footer.hide();$(this.elMain).append($(this.el)),this.options.closing_events&&($(document).on("keyup.ui-modal",function(e){e.keyCode==27&&t.hide()}),this.$el.find(".modal-backdrop").on("click",function(){t.hide()}))},_template:function(e){return'<div class="ui-modal modal"><div class="modal-backdrop fade in" style="z-index: -1;"></div><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" style="display: none;">×</button><h4 class="title">'+e+"</h4>"+"</div>"+'<div class="modal-body" style="position: static;"></div>'+'<div class="modal-footer">'+'<div class="buttons" style="float: right;"></div>'+"</div>"+"</div"+"</div>"+"</div>"}});return{View:e}}),function(){var e=this,t=e._,n={},r=Array.prototype,i=Object.prototype,s=Function.prototype,o=r.push,u=r.slice,a=r.concat,f=i.toString,l=i.hasOwnProperty,c=r.forEach,h=r.map,p=r.reduce,d=r.reduceRight,v=r.filter,m=r.every,g=r.some,y=r.indexOf,b=r.lastIndexOf,w=Array.isArray,E=Object.keys,S=s.bind,x=function(e){if(e instanceof x)return e;if(!(this instanceof x))return new x(e);this._wrapped=e};typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(exports=module.exports=x),exports._=x):e._=x,x.VERSION="1.4.4";var T=x.each=x.forEach=function(e,t,r){if(e==null)return;if(c&&e.forEach===c)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,s=e.length;i<s;i++)if(t.call(r,e[i],i,e)===n)return}else for(var o in e)if(x.has(e,o)&&t.call(r,e[o],o,e)===n)return};x.map=x.collect=function(e,t,n){var r=[];return e==null?r:h&&e.map===h?e.map(t,n):(T(e,function(e,i,s){r.push(t.call(n,e,i,s))}),r)};var N="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(p&&e.reduce===p)return r&&(t=x.bind(t,r)),i?e.reduce(t,n):e.reduce(t);T(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(N);return n},x.reduceRight=x.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(d&&e.reduceRight===d)return r&&(t=x.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=x.keys(e);s=o.length}T(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(N);return n},x.find=x.detect=function(e,t,n){var r;return C(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},x.filter=x.select=function(e,t,n){var r=[];return e==null?r:v&&e.filter===v?e.filter(t,n):(T(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},x.reject=function(e,t,n){return x.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},x.every=x.all=function(e,t,r){t||(t=x.identity);var i=!0;return e==null?i:m&&e.every===m?e.every(t,r):(T(e,function(e,s,o){if(!(i=i&&t.call(r,e,s,o)))return n}),!!i)};var C=x.some=x.any=function(e,t,r){t||(t=x.identity);var i=!1;return e==null?i:g&&e.some===g?e.some(t,r):(T(e,function(e,s,o){if(i||(i=t.call(r,e,s,o)))return n}),!!i)};x.contains=x.include=function(e,t){return e==null?!1:y&&e.indexOf===y?e.indexOf(t)!=-1:C(e,function(e){return e===t})},x.invoke=function(e,t){var n=u.call(arguments,2),r=x.isFunction(t);return x.map(e,function(e){return(r?t:e[t]).apply(e,n)})},x.pluck=function(e,t){return x.map(e,function(e){return e[t]})},x.where=function(e,t,n){return x.isEmpty(t)?n?void 0:[]:x[n?"find":"filter"](e,function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0})},x.findWhere=function(e,t){return x.where(e,t,!0)},x.max=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&x.isEmpty(e))return-Infinity;var r={computed:-Infinity,value:-Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o>=r.computed&&(r={value:e,computed:o})}),r.value},x.min=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&x.isEmpty(e))return Infinity;var r={computed:Infinity,value:Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o<r.computed&&(r={value:e,computed:o})}),r.value},x.shuffle=function(e){var t,n=0,r=[];return T(e,function(e){t=x.random(n++),r[n-1]=r[t],r[t]=e}),r};var k=function(e){return x.isFunction(e)?e:function(t){return t[e]}};x.sortBy=function(e,t,n){var r=k(t);return x.pluck(x.map(e,function(e,t,i){return{value:e,index:t,criteria:r.call(n,e,t,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index<t.index?-1:1}),"value")};var L=function(e,t,n,r){var i={},s=k(t==null?x.identity:t);return T(e,function(t,o){var u=s.call(n,t,o,e);r(i,u,t)}),i};x.groupBy=function(e,t,n){return L(e,t,n,function(e,t,n){(x.has(e,t)?e[t]:e[t]=[]).push(n)})},x.countBy=function(e,t,n){return L(e,t,n,function(e,t){x.has(e,t)||(e[t]=0),e[t]++})},x.sortedIndex=function(e,t,n,r){n=n==null?x.identity:k(n);var i=n.call(r,t),s=0,o=e.length;while(s<o){var u=s+o>>>1;n.call(r,e[u])<i?s=u+1:o=u}return s},x.toArray=function(e){return e?x.isArray(e)?u.call(e):e.length===+e.length?x.map(e,x.identity):x.values(e):[]},x.size=function(e){return e==null?0:e.length===+e.length?e.length:x.keys(e).length},x.first=x.head=x.take=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,0,t):e[0]},x.initial=function(e,t,n){return u.call(e,0,e.length-(t==null||n?1:t))},x.last=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,Math.max(e.length-t,0)):e[e.length-1]},x.rest=x.tail=x.drop=function(e,t,n){return u.call(e,t==null||n?1:t)},x.compact=function(e){return x.filter(e,x.identity)};var A=function(e,t,n){return T(e,function(e){x.isArray(e)?t?o.apply(n,e):A(e,t,n):n.push(e)}),n};x.flatten=function(e,t){return A(e,t,[])},x.without=function(e){return x.difference(e,u.call(arguments,1))},x.uniq=x.unique=function(e,t,n,r){x.isFunction(t)&&(r=n,n=t,t=!1);var i=n?x.map(e,n,r):e,s=[],o=[];return T(i,function(n,r){if(t?!r||o[o.length-1]!==n:!x.contains(o,n))o.push(n),s.push(e[r])}),s},x.union=function(){return x.uniq(a.apply(r,arguments))},x.intersection=function(e){var t=u.call(arguments,1);return x.filter(x.uniq(e),function(e){return x.every(t,function(t){return x.indexOf(t,e)>=0})})},x.difference=function(e){var t=a.apply(r,u.call(arguments,1));return x.filter(e,function(e){return!x.contains(t,e)})},x.zip=function(){var e=u.call(arguments),t=x.max(x.pluck(e,"length")),n=new Array(t);for(var r=0;r<t;r++)n[r]=x.pluck(e,""+r);return n},x.unzip=function(e){var t=[];return x.each(e,function(e,n){x.each(e,function(e,r){t.length<=r&&(t[r]=[]),t[r][n]=e})}),t},x.object=function(e,t){if(e==null)return{};var n={};for(var r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},x.indexOf=function(e,t,n){if(e==null)return-1;var r=0,i=e.length;if(n){if(typeof n!="number")return r=x.sortedIndex(e,t),e[r]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(y&&e.indexOf===y)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},x.lastIndexOf=function(e,t,n){if(e==null)return-1;var r=n!=null;if(b&&e.lastIndexOf===b)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);var i=r?n:e.length;while(i--)if(e[i]===t)return i;return-1},x.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s};var O=function(){};x.bind=function(e,t){var n,r;if(e.bind===S&&S)return S.apply(e,u.call(arguments,1));if(!x.isFunction(e))throw new TypeError;return n=u.call(arguments,2),r=function(){if(this instanceof r){O.prototype=e.prototype;var i=new O;O.prototype=null;var s=e.apply(i,n.concat(u.call(arguments)));return Object(s)===s?s:i}return e.apply(t,n.concat(u.call(arguments)))}},x.partial=function(e){var t=u.call(arguments,1);return function(){return e.apply(this,t.concat(u.call(arguments)))}},x.bindAll=function(e){var t=u.call(arguments,1);if(t.length===0)throw new Error("bindAll must be passed function names");return T(t,function(t){e[t]=x.bind(e[t],e)}),e},x.memoize=function(e,t){var n={};return t||(t=x.identity),function(){var r=t.apply(this,arguments);return x.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},x.delay=function(e,t){var n=u.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},x.defer=function(e){return x.delay.apply(x,[e,1].concat(u.call(arguments,1)))},x.throttle=function(e,t,n){var r,i,s,o,u=0,a=function(){u=new Date,s=null,o=e.apply(r,i)};return function(){var f=new Date;!u&&n===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0?(clearTimeout(s),s=null,u=f,o=e.apply(r,i)):s||(s=setTimeout(a,l)),o}},x.debounce=function(e,t,n){var r,i;return function(){var s=this,o=arguments,u=function(){r=null,n||(i=e.apply(s,o))},a=n&&!r;return clearTimeout(r),r=setTimeout(u,t),a&&(i=e.apply(s,o)),i}},x.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}},x.wrap=function(e,t){return function(){var n=[e];return o.apply(n,arguments),t.apply(this,n)}},x.compose=function(){var e=arguments;return function(){var t=arguments;for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},x.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},x.keys=E||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)x.has(e,n)&&t.push(n);return t},x.values=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push(e[n]);return t},x.pairs=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push([n,e[n]]);return t},x.invert=function(e){var t={};for(var n in e)x.has(e,n)&&(t[e[n]]=n);return t},x.functions=x.methods=function(e){var t=[];for(var n in e)x.isFunction(e[n])&&t.push(n);return t.sort()},x.extend=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e},x.pick=function(e){var t={},n=a.apply(r,u.call(arguments,1));return T(n,function(n){n in e&&(t[n]=e[n])}),t},x.omit=function(e){var t={},n=a.apply(r,u.call(arguments,1));for(var i in e)x.contains(n,i)||(t[i]=e[i]);return t},x.defaults=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e},x.clone=function(e){return x.isObject(e)?x.isArray(e)?e.slice():x.extend({},e):e},x.tap=function(e,t){return t(e),e};var M=function(e,t,n,r){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return e===t;e instanceof x&&(e=e._wrapped),t instanceof x&&(t=t._wrapped);var i=f.call(e);if(i!=f.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(typeof e!="object"||typeof t!="object")return!1;var s=n.length;while(s--)if(n[s]==e)return r[s]==t;n.push(e),r.push(t);var o=0,u=!0;if(i=="[object Array]"){o=e.length,u=o==t.length;if(u)while(o--)if(!(u=M(e[o],t[o],n,r)))break}else{var a=e.constructor,l=t.constructor;if(a!==l&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(l)&&l instanceof l))return!1;for(var c in e)if(x.has(e,c)){o++;if(!(u=x.has(t,c)&&M(e[c],t[c],n,r)))break}if(u){for(c in t)if(x.has(t,c)&&!(o--))break;u=!o}}return n.pop(),r.pop(),u};x.isEqual=function(e,t){return M(e,t,[],[])},x.isEmpty=function(e){if(e==null)return!0;if(x.isArray(e)||x.isString(e))return e.length===0;for(var t in e)if(x.has(e,t))return!1;return!0},x.isElement=function(e){return!!e&&e.nodeType===1},x.isArray=w||function(e){return f.call(e)=="[object Array]"},x.isObject=function(e){return e===Object(e)},T(["Arguments","Function","String","Number","Date","RegExp"],function(e){x["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}}),x.isArguments(arguments)||(x.isArguments=function(e){return!!e&&!!x.has(e,"callee")}),typeof /./!="function"&&(x.isFunction=function(e){return typeof e=="function"}),x.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},x.isNaN=function(e){return x.isNumber(e)&&e!=+e},x.isBoolean=function(e){return e===!0||e===!1||f.call(e)=="[object Boolean]"},x.isNull=function(e){return e===null},x.isUndefined=function(e){return e===void 0},x.has=function(e,t){return l.call(e,t)},x.noConflict=function(){return e._=t,this},x.identity=function(e){return e},x.times=function(e,t,n){var r=Array(e);for(var i=0;i<e;i++)r[i]=t.call(n,i);return r},x.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var _={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};_.unescape=x.invert(_.escape);var D={escape:new RegExp("["+x.keys(_.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(_.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(e){x[e]=function(t){return t==null?"":(""+t).replace(D[e],function(t){return _[e][t]})}}),x.result=function(e,t){if(e==null)return void 0;var n=e[t];return x.isFunction(n)?n.call(e):n},x.mixin=function(e){T(x.functions(e),function(t){var n=x[t]=e[t];x.prototype[t]=function(){var e=[this._wrapped];return o.apply(e,arguments),F.call(this,n.apply(x,e))}})};var P=0;x.uniqueId=function(e){var t=++P+"";return e?e+t:t},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var H=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},j=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(e,t,n){var r;n=x.defaults({},n,x.templateSettings);var i=new RegExp([(n.escape||H).source,(n.interpolate||H).source,(n.evaluate||H).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(j,function(e){return"\\"+B[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,x);var a=function(e){return r.call(this,e,x)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},x.chain=function(e){return x(e).chain()};var F=function(e){return this._chain?x(e).chain():e};x.mixin(x),T(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];x.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],F.call(this,n)}}),T(["concat","join","slice"],function(e){var t=r[e];x.prototype[e]=function(){return F.call(this,t.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}.call(this),define("libs/underscore",function(e){return function(){var t,n;return t||e._}}(this)),define("utils/utils",["libs/underscore"],function(e){function t(e,t,r){n("GET",e,{},t,r)}function n(e,t,n,r,i){if(e=="GET"||e=="DELETE")t.indexOf("?")==-1?t+="?":t+="&",t+=$.param(n);var s=new XMLHttpRequest;s.open(e,t,!0),s.setRequestHeader("Accept","application/json"),s.setRequestHeader("Cache-Control","no-cache"),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.setRequestHeader("Content-Type","application/json"),s.onloadend=function(){var e=s.status;try{response=jQuery.parseJSON(s.responseText)}catch(t){response=s.responseText}e==200?r&&r(response):i&&i(response)},e=="GET"||e=="DELETE"?s.send():s.send(JSON.stringify(n))}function r(e,t){var n=$('<div class="'+e+'"></div>');n.appendTo(":eq(0)");var r=n.css(t);return n.remove(),r}function i(e){$('link[href^="'+e+'"]').length||$('<link href="'+galaxy_config.root+e+'" rel="stylesheet">').appendTo("head")}function s(t,n){return t?e.defaults(t,n):n}function o(e,t){var n="";if(e>=1e11)e/=1e11,n="TB";else if(e>=1e8)e/=1e8,n="GB";else if(e>=1e5)e/=1e5,n="MB";else if(e>=100)e/=100,n="KB";else{if(!(e>0))return"<strong>-</strong>";e*=10,n="b"}var r=Math.round(e)/10;return t?r+" "+n:"<strong>"+r+"</strong> "+n}function u(){return(new Date).getTime().toString(36)}function a(e){var t=$("<p></p>");return t.append(e),t}function f(){var e=new Date,t=(e.getHours()<10?"0":"")+e.getHours(),n=(e.getMinutes()<10?"0":"")+e.getMinutes(),r=e.getDate()+"/"+(e.getMonth()+1)+"/"+e.getFullYear()+", "+t+":"+n;return r}return{cssLoadFile:i,cssGetAttribute:r,get:t,merge:s,bytesToString:o,uuid:u,time:f,wrap:a,request:n}}),define("mvc/ui/ui-portlet",["utils/utils"],function(e){var t=Backbone.View.extend({visible:!1,optionsDefault:{title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom"},$title:null,$content:null,$buttons:null,$operations:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.$content=this.$el.find("#content"),this.$title=this.$el.find("#portlet-header-text");var n=this.$el.find("#portlet-content");this.options.scrollable?n.addClass("scroll"):this.options.title?n.addClass("no-scroll"):n.addClass("no-scroll-no-title"),this.options.nopadding&&(n.css("padding","0px"),this.$content.css("padding","0px")),this.$buttons=$(this.el).find("#buttons");if(this.options.buttons){var r=this;$.each(this.options.buttons,function(e,t){t.$el.prop("id",e),r.$buttons.append(t.$el)})}else this.$buttons.remove();this.$operations=$(this.el).find("#operations");if(this.options.operations){var r=this;$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$operations.append(t.$el)})}this.options.body&&this.append(this.options.body)},append:function(t){this.$content.append(e.wrap(t))},content:function(){return this.$content},show:function(){this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},enableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!1)},disableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!0)},hideOperation:function(e){this.$operations.find("#"+e).hide()},showOperation:function(e){this.$operations.find("#"+e).show()},setOperation:function(e,t){var n=this.$operations.find("#"+e);n.off("click"),n.on("click",t)},title:function(e){var t=this.$title;return e&&t.html(e),t.html()},_template:function(e){var t='<div class="ui-portlet">';return e.title&&(t+='<div id="portlet-header" class="portlet-header"><div id="operations" style="float: right;"></div><h3>',e.icon&&(t+='<i class="icon fa '+e.icon+'"> </i>'),t+='<span id="portlet-header-text">'+e.title+"</span>"+"</h3>"+"</div>"),t+='<div id="portlet-content" class="portlet-content">',e.placement=="top"&&(t+='<div id="buttons" class="buttons"></div>'),t+='<div id="content" class="content"></div>',e.placement=="bottom"&&(t+='<div id="buttons" class="buttons"></div>'),t+="</div></div>",t}});return{View:t}}),define("plugin/library/ui-select",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:!0,wait:!1},selected:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.selected=this.options.value,this.setElement(this._template(this.options)),this.$select=this.$el.find("#select"),this.$icon=this.$el.find("#icon");var n=this;this.$select.on("change",function(){n.value(n.$select.val())}),this.on("change",function(){n.options.onchange&&n.options.onchange(n.value())}),this._refresh(),this.options.visible||this.hide(),this.options.wait?this.wait():this.show()},value:function(e){var t=this.selected;e!==undefined&&(this.selected=e,this.$select.val(e));var n=this.selected;return n&&n!=t&&this.options.onchange&&this.options.onchange(n),n},first:function(){var e=this.$select.find("option");return e.length>0?e.val():undefined},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-caret-down"),this.$select.show(),this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-spinner fa-spin"),this.$select.hide()},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",!1)},disable:function(){this.$select.prop("disabled",!0)},add:function(e){this.$select.append(this._templateOption(e)),this._refresh()},del:function(e){this.$select.find("option[value="+e+"]").remove(),this.$select.trigger("change"),this._refresh()},update:function(e){this.$select.find("option").remove();for(var t in e)this.$select.append(this._templateOption(e[t]));this._refresh()},setOnChange:function(e){this.options.onchange=e},exists:function(e){return this.$select.find("option[value="+e+"]").length>0},_refresh:function(){this.$select.find("option[value=null]").remove();var e=this.$select.find("option").length;e==0?(this.disable(),this.$select.append(this._templateOption({value:"null",label:this.options.empty}))):this.enable(),this.selected&&this.$select.val(this.selected)},_templateOption:function(e){return'<option value="'+e.value+'">'+e.label+"</option>"},_template:function(e){var t='<div id="'+e.id+'" class="ui-select">'+'<div class="button">'+'<i id="icon"/>'+"</div>"+'<select id="select" class="select '+e.cls+" "+e.id+'">';for(key in e.data){var n=e.data[key],r="";if(n.value==e.value||n.value=="")r="selected";t+='<option value="'+n.value+'" '+r+">"+n.label+"</option>"}return t+="</select></div>",t}});return{View:t}}),define("plugin/library/ui",["utils/utils","plugin/library/ui-select","mvc/ui/ui-modal"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{url:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},_template:function(e){return'<img class="ui-image '+e.cls+'" src="'+e.url+'"/>'}}),i=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},title:function(e){this.$el.html(e)},_template:function(e){return'<label class="ui-label '+e.cls+'">'+e.title+"</label>"},value:function(){return options.title}}),s=Backbone.View.extend({optionsDefault:{id:null,title:"","float":"right",cls:"btn btn-default",icon:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t='<button id="'+e.id+'" type="submit" style="float: '+e.float+';" type="button" class="ui-button '+e.cls+'">';return e.icon&&(t+='<i class="icon fa '+e.icon+'"></i> '),t+=e.title+"</button>",t}}),o=Backbone.View.extend({optionsDefault:{"float":"right",icon:"",tooltip:"",placement:"bottom",title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){return'<div><span class="fa '+e.icon+'" class="ui-icon"/> '+e.title+"</div>"}}),u=Backbone.View.extend({optionsDefault:{title:"",id:null,"float":"right",cls:"icon-btn",icon:"",tooltip:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t="";e.title&&(t="width: auto;");var n='<div id="'+e.id+'" style="float: '+e.float+"; "+t+'" class="ui-button-icon '+e.cls+'">';return e.title?n+='<div class="button"><i class="icon fa '+e.icon+'"/> '+'<span class="title">'+e.title+"</span>"+"</div>":n+='<i class="icon fa '+e.icon+'"/>',n+="</div>",n}}),a=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick)},_template:function(e){return'<div><a href="javascript:void(0)" class="ui-anchor '+e.cls+'">'+e.title+"</a></div>"}}),f=Backbone.View.extend({optionsDefault:{message:"",status:"info",persistent:!1},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement("<div></div>")},update:function(t){this.options=e.merge(t,this.optionsDefault);if(t.message!=""){this.$el.html(this._template(this.options)),this.$el.find(".alert").append(t.message),this.$el.fadeIn();if(!t.persistent){var n=this;window.setTimeout(function(){n.$el.is(":visible")?n.$el.fadeOut():n.$el.hide()},3e3)}}else this.$el.fadeOut()},_template:function(e){return'<div class="ui-message alert alert-'+e.status+'"/>'}}),l=Backbone.View.extend({optionsDefault:{onclick:null,searchword:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options));var n=this;this.options.onclick&&this.$el.on("submit",function(e){var t=n.$el.find("#search");n.options.onclick(t.val())})},_template:function(e){return'<div class="ui-search"><form onsubmit="return false;"><input id="search" class="form-control input-sm" type="text" name="search" placeholder="Search..." value="'+e.searchword+'">'+'<button type="submit" class="btn search-btn">'+'<i class="fa fa-search"></i>'+"</button>"+"</form>"+"</div>"}}),c=Backbone.View.extend({optionsDefault:{id:"",title:"",target:"",href:"",onunload:null,onclick:null,visible:!0,icon:null,tag:""},$menu:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement($(this._template(this.options)));var n=$(this.el).find(".root"),r=this;n.on("click",function(e){e.preventDefault(),r.options.onclick&&r.options.onclick()}),this.options.visible||this.hide()},show:function(){$(this.el).show()},hide:function(){$(this.el).hide()},addMenu:function(t){var n={title:"",target:"",href:"",onclick:null,divider:!1,icon:null,cls:"button-menu btn-group"};n=e.merge(t,n),this.$menu||($(this.el).append(this._templateMenu()),this.$menu=$(this.el).find(".menu"));var r=$(this._templateMenuItem(n));r.on("click",function(e){e.preventDefault(),n.onclick&&n.onclick()}),this.$menu.append(r),n.divider&&this.$menu.append($(this._templateDivider()))},_templateMenuItem:function(e){var t='<li><a href="'+e.href+'" target="'+e.target+'">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),t+=" "+e.title+"</a>"+"</li>",t},_templateMenu:function(){return'<ul class="menu dropdown-menu pull-right" role="menu"></ul>'},_templateDivider:function(){return'<li class="divider"></li>'},_template:function(e){var t='<div id="'+e.id+'" class="ui-button-menu '+e.cls+'">'+'<button type="button" class="root btn btn-default dropdown-toggle" data-toggle="dropdown">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),"</button></div>",t}}),h=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<input id="'+e.id+'" type="'+e.type+'" value="'+e.value+'" placeholder="'+e.placeholder+'" class="ui-input '+e.cls+'">'}}),p=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<textarea id="'+e.id+'" class="ui-textarea '+e.cls+'" rows="5"></textarea>'}}),d=Backbone.View.extend({optionsDefault:{value:"",visible:!0,cls:"",data:[],id:e.uuid()},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.visible||this.$el.hide(),this.options.value&&this.value(this.options.value),this.current=this.options.value;var n=this;this.$el.find("input").on("change",function(){n.value(n._getValue())})},value:function(e){var t=this.current;e!==undefined&&(this.$el.find("label").removeClass("active"),this.$el.find('[value="'+e+'"]').closest("label").addClass("active"),this.current=e);var n=this.current;return n!=t&&this.options.onchange&&this.options.onchange(this.current),this.current},_getValue:function(){var e=this.$el.find(":checked"),t=null;return e.length>0&&(t=e.val()),t},_template:function(e){var t='<div class="btn-group ui-radiobutton" data-toggle="buttons">';for(key in e.data){var n=e.data[key];t+='<label class="btn btn-default"><input type="radio" name="'+e.id+'" value="'+n.value+'" selected>'+n.label+"</label>"}return t+="</div>",t}});return{Label:i,Button:s,Icon:o,ButtonIcon:u,Input:h,Anchor:a,Message:f,Searchbox:l,Select:t,ButtonMenu:c,Modal:n,Textarea:p,Image:r,RadioButton:d}}),define("plugin/library/jobs",["utils/utils"],function(e){return Backbone.Model.extend({initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n,r,i){var s=this;e.state("wait","Requesting job results...");var o=e.get("dataset_id_job");o!=""?s._wait(e,r,i):s._submit(e,t,n,r,i)},cleanup:function(t){var n=this,r=t.get("dataset_id_job");r!=""&&(e.request("PUT",config.root+"api/histories/none/contents/"+r,{deleted:!0},function(){n._refreshHdas()}),t.set("dataset_id_job",""))},_submit:function(t,n,r,i,s){var o=this,u=t.id,a=t.get("type"),f=t.definition;data={tool_id:"charts",inputs:{input:{id:t.get("dataset_id"),src:"hda"},module:f.execute,columns:r,settings:n}},t.state("wait","Sending job request..."),e.request("POST",config.root+"api/tools",data,function(e){if(!e.outputs||e.outputs.length==0)t.state("failed","Job submission failed. No response."),s&&s();else{o._refreshHdas();var n=e.outputs[0];t.state("wait","Your job has been queued. You may close the browser window. The job will run in the background."),t.set("dataset_id_job",n.id),this.app.storage.save(),o._wait(t,i,s)}},function(e){var n="";e&&e.message&&e.message.data&&e.message.data.input&&(n=e.message.data.input+"."),t.state("failed","This visualization requires the 'charts' tool. Please make sure it is installed. "+n),s&&s()})},_wait:function(t,n,r){var i=this;e.request("GET",config.root+"api/datasets/"+t.get("dataset_id_job"),{},function(e){var s=!1;switch(e.state){case"ok":t.state("wait","Job completed successfully..."),n&&n(e),s=!0;break;case"error":t.state("failed","Job has failed. Please check the history for details."),r&&r(e),s=!0;break;case"running":t.state("wait","Your job is running. You may close the browser window. The job will continue in the background.")}s||setTimeout(function(){i._wait(t,n,r)},i.app.config.get("query_timeout"))})},_refreshHdas:function(){Galaxy&&Galaxy.currHistoryPanel&&Galaxy.currHistoryPanel.refreshContents()}})}),define("plugin/library/datasets",["utils/utils"],function(e){return Backbone.Collection.extend({list:{},cache:{},initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n){var r=this;e.groups?this._get_dataset(e.id,function(){r._get(e,t)}):this._get_dataset(e.id,t,n)},_get_dataset:function(t,n,r){var i=this.list[t];if(i){n(i);return}var s=this;e.request("GET",config.root+"api/datasets/"+t,{},function(e){switch(e.state){case"error":r&&r(e);break;default:s.list[t]=e,n(e)}})},_block_id:function(e,t){return e.id+"_"+e.start+"_"+e.end+"_"+t},_get:function(e,t){e.start||(e.start=0),e.end||(e.end=this.app.config.get("query_limit"));var n=[],r={},i=0;for(var s in e.groups){var o=e.groups[s];for(var u in o.columns){var a=o.columns[u].index,f=this._block_id(e,a);if(this.cache[f]||a==="auto")continue;!r[a]&&a!==undefined&&(r[a]=i,n.push(a),i++)}}if(n.length==0){this._fill_from_cache(e),t(e);return}var l={dataset_id:e.id,start:e.start,end:e.end,columns:n},c=this;this._fetch(l,function(r){for(var i in r){var s=n[i],o=c._block_id(e,s);c.cache[o]=r[i]}c._fill_from_cache(e),t(e)})},_fill_from_cache:function(e){console.debug("Datasets::_fill_from_cache() - Filling request from cache.");var t=e.start,n=0;for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s],u=this._block_id(e,o.index),a=this.cache[u];a&&(n=Math.max(n,a.length))}}n==0&&console.debug("FAILED - Datasets::_fill_from_cache() - Invalid range.");for(var r in e.groups){var i=e.groups[r];i.values=[];for(var f=0;f<n;f++)i.values[f]={x:parseInt(f)+t}}for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s];if(o.index=="auto")for(var f=0;f<n;f++){var l=i.values[f];l[s]=parseInt(f)+t}else{var u=this._block_id(e,o.index),a=this.cache[u];for(var f=0;f<n;f++){var l=i.values[f],c=a[f];isNaN(c)&&!o.is_label&&(c=0),l[s]=c}}}}},_fetch:function(t,n){var r=t.start?t.start:0,i=Math.abs(t.end-t.start),s=this.app.config.get("query_limit");if(!i||i>s)i=s;var o=0;t.columns&&(o=t.columns.length,console.debug("Datasets::_fetch() - Fetching "+o+" column(s)")),o==0&&console.debug("Datasets::_fetch() - No columns requested");var u="";for(var a in t.columns)u+=t.columns[a]+",";u=u.substring(0,u.length-1);var f=this;e.request("GET",config.root+"api/datasets/"+t.dataset_id,{data_type:"raw_data",provider:"dataset-column",limit:i,offset:r,indeces:u},function(e){var t=new Array(o);for(var r=0;r<o;r++)t[r]=[];for(var r in e.data){var i=e.data[r];for(var s in i){var u=i[s];u!==undefined&&u!=2147483647&&t[s].push(u)}}console.debug("Datasets::_fetch() - Fetching complete."),n(t)})}})}),define("plugin/models/group",[],function(){return Backbone.Model.extend({defaults:{key:"Data label",date:""},reset:function(){this.clear({silent:!0}).set(this.defaults),this.trigger("reset",this)}})}),define("plugin/models/groups",["plugin/models/group"],function(e){return Backbone.Collection.extend({model:e})}),define("plugin/library/deferred",["utils/utils"],function(e){return Backbone.Model.extend({queue:[],process:{},counter:0,initialize:function(){this.on("refresh",function(){for(var e in this.queue)if(this.counter==0){var t=this.queue[e];this.queue.splice(e,1),t()}})},execute:function(e){this.queue.push(e),this.trigger("refresh")},register:function(){var t=e.uuid();return this.process[t]=!0,this.counter++,console.debug("Deferred:register() - Registering "+t),t},done:function(e){this.process[e]&&(delete this.process[e],this.counter--,console.debug("Deferred:done() - Unregistering "+e),this.trigger("refresh"))},ready:function(){return this.counter==0}})});var Visualization=Backbone.Model.extend({defaults:{config:{}},urlRoot:function(){var e="/api/visualizations";return window.galaxy_config&&galaxy_config.root?galaxy_config.root+e:e},initialize:function(e){_.isObject(e.config)&&_.isObject(this.defaults.config)&&_.defaults(e.config,this.defaults.config),this._setUpListeners()},_setUpListeners:function(){},set:function(e,t){if(e==="config"){var n=this.get("config");_.isObject(n)&&(t=_.extend(_.clone(n),t))}return Backbone.Model.prototype.set.call(this,e,t),this},toString:function(){var e=this.get("id")||"";return this.get("title")&&(e+=":"+this.get("title")),"Visualization("+e+")"}}),VisualizationCollection=Backbone.Collection.extend({model:Visualization,url:function(){return galaxy_config.root+"api/visualizations"},initialize:function(e,t){t=t||{}},set:function(e,t){var n=this;e=_.map(e,function(e){var t=n.get(e.id);if(!t)return e;var r=t.toJSON();return _.extend(r,e),r}),Backbone.Collection.prototype.set.call(this,e,t)},toString:function(){return["VisualizationCollection(",[this.historyId,this.length].join(),")"].join("")}});define("mvc/visualization/visualization-model",function(){}),define("plugin/models/chart",["plugin/models/groups","plugin/library/deferred","mvc/visualization/visualization-model"],function(e,t){return Backbone.Model.extend({defaults:{id:null,title:"",type:"",date:null,state:"",state_info:"",modified:!1,dataset_id:"",dataset_id_job:""},initialize:function(n){this.groups=new e,this.settings=new Backbone.Model,this.deferred=new t},reset:function(){this.clear({silent:!0}).set(this.defaults),this.groups.reset(),this.settings.clear(),this.trigger("reset",this)},copy:function(e){var t=this;t.clear({silent:!0}).set(this.defaults),t.set(e.attributes),t.settings=e.settings.clone(),t.groups.reset(),e.groups.each(function(e){t.groups.add(e.clone())}),t.trigger("change",t)},state:function(e,t){this.set("state",e),this.set("state_info",t),this.trigger("set:state"),console.debug("Chart:state() - "+t+" ("+e+")")}})}),define("plugin/library/storage",["utils/utils","plugin/models/chart","plugin/models/group"],function(e,t,n){return Backbone.Model.extend({vis:null,initialize:function(e){this.app=e,this.chart=this.app.chart,this.options=this.app.options,this.id=this.options.id,this.vis=new Visualization({type:"charts",config:{dataset_id:this.options.config.dataset_id,chart_dict:{}}}),this.id&&(this.vis.id=this.id);var t=this.options.config.chart_dict;t&&(this.vis.get("config").chart_dict=t)},save:function(){var e=this.app.chart;this.vis.get("config").chart_dict={};var t=e.get("title");t!=""&&this.vis.set("title",t);var n={attributes:e.attributes,settings:e.settings.attributes,groups:[]};e.groups.each(function(e){n.groups.push(e.attributes)}),this.vis.get("config").chart_dict=n;var r=this;this.vis.save().fail(function(e,t,n){console.error(e,t,n)}).then(function(e){e&&e.id&&(r.id=e.id)})},load:function(){var e=this.vis.get("config").chart_dict;if(!e.attributes)return!1;var t=e.attributes.type;if(!t)return console.debug("Storage::load() - Chart type not provided. Invalid format."),!1;var r=this.app.types.get(t);if(!r)return console.debug("Storage::load() - Chart type not supported. Please re-configure the chart. Resetting chart."),!1;console.debug("Storage::load() - Loading chart type "+t+"."),this.chart.definition=r,this.chart.set(e.attributes),this.chart.state("ok","Loading saved visualization..."),this.chart.settings.set(e.settings);for(var i in e.groups)this.chart.groups.add(new n(e.groups[i]));return this.chart.set("modified",!1),!0}})}),define("plugin/library/screenshot",["libs/underscore"],function(e){function t(e,t,i){var s=new XMLSerializer,o="",u=this,a=0,f=0;return e.find("svg").each(function(){var e=$(this);n(e),a=parseInt(e.css("height")),f=parseInt(e.css("width")),e.attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:f,height:a}),e.find(".highcharts-button").hide(),o+=s.serializeToString(this),e.find(".highcharts-button").show()}),r(e,t,{filename:i||"chart",type:"application/pdf",height:a,width:f,scale:2,svg:o}),o}function n(e){for(var t in document.styleSheets){var n=document.styleSheets[t],r=n.cssRules;if(r)for(var i=0,s=r.length;i<s;i++)try{e.find(r[i].selectorText).each(function(e,t){t.style.cssText+=r[i].style.cssText})}catch(o){}}}function r(e,t,n){var r=e.find("#viewport-form");r.length===0&&(r=$("<form>",{id:"viewport-form",method:"post",action:t,display:"none"}),e.append(r)),r.empty();for(name in n){var i=$("<input/>",{type:"hidden",name:name,value:n[name]});r.append(i)}try{r.submit()}catch(s){console.log(s)}}return{create:t}}),define("plugin/views/viewport",["mvc/ui/ui-portlet","plugin/library/ui","plugin/library/screenshot","utils/utils"],function(e,t,n,r){return Backbone.View.extend({container_list:[],canvas_list:[],initialize:function(e,t){this.app=e,this.chart=this.app.chart,this.options=r.merge(t,this.optionsDefault),this.setElement($(this._template())),this._fullscreen(this.$el,100),this._createContainer("div");var n=this;this.chart.on("redraw",function(){n._draw(n.chart)}),this.chart.on("set:state",function(){var e=n.$el.find("#info"),t=n.$el.find(".charts-viewport-container"),r=e.find("#icon");r.removeClass(),e.show(),e.find("#text").html(n.chart.get("state_info"));var i=n.chart.get("state");switch(i){case"ok":e.hide(),t.show();break;case"failed":r.addClass("icon fa fa-warning"),t.hide();break;default:r.addClass("icon fa fa-spinner fa-spin"),t.show()}})},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_fullscreen:function(e,t){e.css("height",$(window).height()-t),$(window).resize(function(){e.css("height",$(window).height()-t)})},_createContainer:function(e,t){t=t||1;for(var n in this.container_list)this.container_list[n].remove();this.container_list=[],this.canvas_list=[];for(var n=0;n<t;n++){var r=$(this._templateContainer(e,parseInt(100/t)));this.$el.append(r),this.container_list[n]=r,e=="svg"?this.canvas_list[n]=d3.select(r.find("#canvas")[0]):this.canvas_list[n]=r.find("#canvas")}},_draw:function(e){var t=this,n=e.deferred.register(),r=e.get("type");this.chart_definition=e.definition;var i=this.chart_definition.use_panels||e.settings.get("use_panels")==="true",s=1;i&&(s=e.groups.length),this._createContainer(this.chart_definition.tag,s),e.state("wait","Please wait...");if(!this.chart_definition.execute||this.chart_definition.execute&&e.get("modified"))this.app.jobs.cleanup(e),e.set("modified",!1);var t=this;require(["plugin/charts/"+this.app.chartPath(r)+"/wrapper"],function(r){var i=new r(t.app,{canvas:t.canvas_list});t.chart_definition.execute?t.app.jobs.request(e,t._defaultSettingsString(e),t._defaultRequestString(e),function(){i.draw(n,e,t._defaultRequestDictionary(e))},function(){e.deferred.done(n)}):i.draw(n,e,t._defaultRequestDictionary(e))})},_defaultRequestString:function(e){var t="",n=0,r=this;return e.groups.each(function(e){n++;for(var i in r.chart_definition.columns)t+=i+"_"+n+":"+(parseInt(e.get(i))+1)+", "}),t.substring(0,t.length-2)},_defaultSettingsString:function(e){var t="";for(key in e.settings.attributes)t+=key+":"+e.settings.get(key)+", ";return t.substring(0,t.length-2)},_defaultRequestDictionary:function(e){var t={groups:[]};this.chart_definition.execute?t.id=e.get("dataset_id_job"):t.id=e.get("dataset_id");var n=0,i=this;return e.groups.each(function(e){var s={};for(var o in i.chart_definition.columns){var u=i.chart_definition.columns[o];s[o]=r.merge({index:e.get(o)},u)}t.groups.push({key:++n+":"+e.get("key"),columns:s})}),t},_template:function(){return'<div class="charts-viewport"><div id="info" class="info"><span id="icon" class="icon" /><span id="text" class="text" /></div></div>'},_templateContainer:function(e,t){return'<div class="charts-viewport-container" style="width:'+t+'%;">'+'<div id="menu"/>'+"<"+e+' id="canvas" class="charts-viewport-canvas">'+"</div>"}})}),define("plugin/views/viewer",["utils/utils","plugin/library/ui","mvc/ui/ui-portlet","plugin/models/group","plugin/views/viewport","plugin/library/screenshot"],function(e,t,n,r,i,s){return Backbone.View.extend({initialize:function(e,r){this.app=e,this.chart=this.app.chart,this.viewport_view=new i(e);var o=this;this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Viewport",scrollable:!1,operations:{edit_button:new t.ButtonIcon({icon:"fa-edit",tooltip:"Customize this chart",title:"Editor",onclick:function(){o._wait(o.chart,function(){o.app.go("editor")})}}),picture_button:new t.ButtonIcon({icon:"fa-camera",tooltip:"Download PDF-file ("+o.app.config.get("screenshot_url")+")",title:"Screenshot",onclick:function(){o._wait(o.chart,function(){s.create(o.viewport_view.$el,o.app.config.get("screenshot_url"),o.chart.get("title"))})}})}}),this.portlet.append(this.message.$el),this.portlet.append(this.viewport_view.$el),this.setElement(this.portlet.$el);var o=this;this.chart.on("change:title",function(){o._refreshTitle()})},show:function(){this.$el.show(),$(window).trigger("resize")},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e)},_wait:function(e,t){e.deferred.ready()?t():this.message.update({message:"Your chart is currently being processed. Please wait and try again."})}})}),define("mvc/ui/ui-tabs",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{title_new:"",operations:null,onnew:null},initialize:function(t){this.visible=!1,this.$nav=null,this.$content=null,this.first_tab=null,this.options=e.merge(t,this.optionsDefault);var n=$(this._template(this.options));this.$nav=n.find(".tab-navigation"),this.$content=n.find(".tab-content"),this.setElement(n),this.list={};var r=this;this.options.operations&&$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$nav.find(".operations").append(t.$el)});if(this.options.onnew){var i=$(this._template_tab_new(this.options));this.$nav.append(i),i.tooltip({title:"Add a new tab",placement:"bottom",container:r.$el}),i.on("click",function(e){i.tooltip("hide"),r.options.onnew()})}},add:function(e){var t=this,n=e.id,r=$(this._template_tab(e)),i=$(this._template_tab_content(e));this.list[n]=e.ondel?!0:!1,this.options.onnew?this.$nav.find("#new-tab").before(r):this.$nav.append(r),i.append(e.$el),this.$content.append(i),_.size(this.list)==1&&(r.addClass("active"),i.addClass("active"),this.first_tab=n);if(e.ondel){var s=r.find("#delete");s.tooltip({title:"Delete this tab",placement:"bottom",container:t.$el}),s.on("click",function(){return s.tooltip("destroy"),t.$el.find(".tooltip").remove(),e.ondel(),!1})}r.on("click",function(r){r.preventDefault(),e.onclick?e.onclick():t.show(n)})},del:function(e){this.$el.find("#tab-"+e).remove(),this.$el.find("#tab-content-"+e).remove(),this.first_tab==e&&(this.first_tab=null),this.first_tab!=null&&this.show(this.first_tab)},delRemovable:function(){for(var e in this.list)this.list[e]&&this.del(e)},show:function(e){this.$el.fadeIn("fast"),this.visible=!0,e&&(this.$el.find(".tab-element").removeClass("active"),this.$el.find(".tab-pane").removeClass("active"),this.$el.find("#tab-"+e).addClass("active"),this.$el.find("#tab-content-"+e).addClass("active"))},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},hideOperation:function(e){this.$nav.find("#"+e).hide()},showOperation:function(e){this.$nav.find("#"+e).show()},setOperation:function(e,t){var n=this.$nav.find("#"+e);n.off("click"),n.on("click",t)},title:function(e,t){var n=this.$el.find("#tab-title-text-"+e);return t&&n.html(t),n.html()},_template:function(e){return'<div class="ui-tabs tabbable tabs-left"><ul id="tab-navigation" class="tab-navigation nav nav-tabs"><div class="operations" style="float: right; margin-bottom: 4px;"></div></ul><div id="tab-content" class="tab-content"/></div>'},_template_tab_new:function(e){return'<li id="new-tab"><a href="javascript:void(0);"><i class="ui-tabs-add fa fa-plus-circle"/>'+e.title_new+"</a>"+"</li>"},_template_tab:function(e){var t='<li id="tab-'+e.id+'" class="tab-element">'+'<a id="tab-title-link-'+e.id+'" title="" href="#tab-content-'+e.id+'" data-original-title="">'+'<span id="tab-title-text-'+e.id+'">'+e.title+"</span>";return e.ondel&&(t+='<i id="delete" class="ui-tabs-delete fa fa-minus-circle"/>'),t+="</a></li>",t},_template_tab_content:function(e){return'<div id="tab-content-'+e.id+'" class="tab-pane"/>'}});return{View:t}}),define("plugin/library/ui-table",["utils/utils"],function(e){var t=Backbone.View.extend({row:null,row_count:0,optionsDefault:{content:"No content available.",onchange:null,ondblclick:null,onconfirm:null,cls:""},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(t){this.options=e.merge(t,this.optionsDefault);var n=$(this._template(t));this.$thead=n.find("thead"),this.$tbody=n.find("tbody"),this.$tmessage=n.find("tmessage"),this.setElement(n),this.row=$("<tr></tr>")},addHeader:function(e){var t=$("<th></th>");t.append(e),this.row.append(t)},appendHeader:function(){this.$thead.append(this.row),this.row=$("<tr></tr>")},add:function(e,t,n){var r=$("<td></td>");t&&r.css("width",t),n&&r.css("text-align",n),r.append(e),this.row.append(r)},append:function(e){this._commit(e)},prepend:function(e){this._commit(e,!0)},get:function(e){return this.$el.find("#"+e)},del:function(e){var t=this.$tbody.find("#"+e);t.length>0&&(t.remove(),this.row_count--,this._refresh())},delAll:function(){this.$tbody.html(""),this.row_count=0,this._refresh()},value:function(e){this.before=this.$tbody.find(".current").attr("id"),e!==undefined&&(this.$tbody.find("tr").removeClass("current"),e&&this.$tbody.find("#"+e).addClass("current"));var t=this.$tbody.find(".current").attr("id");return t===undefined?null:(t!=this.before&&this.options.onchange&&this.options.onchange(e),t)},size:function(){return this.$tbody.find("tr").length},_commit:function(e,t){this.del(e),this.row.attr("id",e),t?this.$tbody.prepend(this.row):this.$tbody.append(this.row),this.row=$("<tr></tr>"),this.row_count++,this._refresh()},_onclick:function(e){var t=this.value(),n=$(e.target).closest("tr").attr("id");n!=""&&n&&t!=n&&(this.options.onconfirm?this.options.onconfirm(n):this.value(n))},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_refresh:function(){this.row_count==0?this.$tmessage.show():this.$tmessage.hide()},_template:function(e){return'<div><table class="ui-table '+e.cls+'">'+"<thead></thead>"+'<tbody style="cursor: pointer;"></tbody>'+"</table>"+"<tmessage>"+e.content+"</tmessage>"+"<div>"}});return{View:t}}),define("plugin/views/group",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(r,i){this.app=r;var s=this;this.chart=this.app.chart,this.group=i.group,this.group_key=new t.Input({placeholder:"Data label",onchange:function(e){s.group.set("key",e)}}),this.table=new e.View({content:"No data column."});var o=$("<div/>");o.append(n.wrap((new t.Label({title:"Provide a label:"})).$el)),o.append(n.wrap(this.group_key.$el)),o.append(n.wrap((new t.Label({title:"Select columns:"})).$el)),o.append(n.wrap(this.table.$el)),this.setElement(o);var s=this;this.chart.on("change:dataset_id",function(){s._refreshTable()}),this.chart.on("change:type",function(){s._refreshTable()}),this.group.on("change:key",function(){s._refreshGroupKey()}),this.group.on("change",function(){s._refreshGroup()}),this._refreshTable(),this._refreshGroupKey(),this._refreshGroup()},_refreshTable:function(){var e=this.chart.get("dataset_id"),n=this.chart.get("type");if(!e||!n)return;var r=this,i=this.chart.definition;this.table.delAll();var s={};for(var o in i.columns){var u=i.columns[o];if(!u){console.debug("Group::_refreshTable() - Skipping column definition.");continue}var a=new t.Select.View({id:"select_"+o,wait:!0});this.table.add(u.title,"25%"),this.table.add(a.$el),this.table.append(o),s[o]=a}this.chart.state("wait","Loading metadata...");var f=this.chart.deferred.register();this.app.datasets.request({id:e},function(e){for(var t in s)r._addRow(t,e,s,i.columns[t]);r.chart.state("ok","Metadata initialized..."),r.chart.deferred.done(f)})},_addRow:function(e,t,n,r){var i=this,s=r.is_label,o=r.is_auto,u=r.is_numeric,a=[],f=n[e];o&&a.push({label:"Column: Row Number",value:"auto"});var l=t.metadata_column_types;for(var c in l){var h=!1;l[c]=="int"||l[c]=="float"?h=u:h=s,h&&a.push({label:"Column: "+(parseInt(c)+1)+" ["+l[c]+"]",value:c})}f.update(a);if(!f.exists(this.group.get(e))){var p=f.first();console.debug('Group()::_addRow() - Switching model value from "'+this.group.get(e)+'" to "'+p+'".'),this.group.set(e,p)}f.value(this.group.get(e)),f.setOnChange(function(t){i.group.set(e,t),i.chart.set("modified",!0)}),f.show()},_refreshGroup:function(){this.group.set("date",n.time())},_refreshGroupKey:function(){var e=this.group.get("key");e===undefined&&(e=""),this.group_key.value(e)}})}),define("plugin/library/ui-table-form",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{title:"",content:"",mode:""},list:[],initialize:function(r,i){this.app=r,this.options=n.merge(i,this.optionsDefault),this.table_title=new t.Label({title:this.options.title}),this.table=new e.View({content:this.options.content});var s=$('<div class="ui-table-form"/>');this.options.title&&s.append(n.wrap(this.table_title.$el)),s.append(n.wrap(this.table.$el)),this.setElement(s)},title:function(e){this.table_title.title(e)},update:function(e,t){this.table.delAll(),this.list=[];for(var n in e)this._add(e[n].id||n,e[n],t);for(var n in this.list)this.list[n].trigger("change")},_add:function(e,n,r){var i=this,s=null,o=n.type;switch(o){case"text":s=new t.Input({id:"field-"+e,placeholder:n.placeholder,value:r.get(e),onchange:function(t){r.set(e,t)}});break;case"radiobutton":s=new t.RadioButton({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"select":s=new t.Select.View({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"dataset":s=new t.Select.View({id:"field-"+e,onchange:function(t){r.set(e,t)}}),i.app.datasets.on("all",function(){var t=[];i.app.datasets.each(function(e){e.get("datatype_id")==n.data&&t.push({value:e.get("id"),label:e.get("name")})}),s.update(t),r.get(e)||r.set(e,s.first()),s.value(r.get(e))}),i.app.datasets.trigger("all.datasets");break;case"textarea":s=new t.Textarea({id:"field-"+e,onchange:function(){r.set(e,s.value())}});break;case"separator":s=$("<div/>");break;default:s=new t.Input({id:"field-"+e,placeholder:n.placeholder,type:n.type,onchange:function(){r.set(e,s.value())}})}if(o!="separator"){r.get(e)||r.set(e,n.init),s.value(r.get(e)),this.list[e]=s;var u=$("<div/>");u.append(s.$el),n.info&&u.append('<div class="ui-table-form-info">'+n.info+"</div>"),this.options.style=="bold"?(this.table.add((new t.Label({title:n.title,cls:"form-label"})).$el),this.table.add(u)):(this.table.add('<span class="ui-table-form-title">'+n.title+"</span>","25%"),this.table.add(u))}else this.table.add('<div class="ui-table-form-separator">'+n.title+":<div/>"),this.table.add($("<div/>"));this.table.append(e)}});return{View:r}}),define("plugin/views/settings",["plugin/library/ui","plugin/library/ui-table-form","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(e,n){this.app=e;var r=this;this.chart=this.app.chart,this.form=new t.View({title:"Chart options:",content:"This chart type does not provide any options."}),this.setElement(this.form.$el);var r=this;this.chart.on("change",function(){r._refresh()})},_refresh:function(){var e=this.chart.definition;if(!e)return;this.form.title(e.category+" - "+e.title+":"),this.form.update(e.settings,this.chart.settings)}})}),define("plugin/views/types",["utils/utils","plugin/library/ui"],function(e,t){return Backbone.View.extend({optionsDefault:{onchange:null,ondblclick:null},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(t,n){var r=this;this.app=t,this.options=e.merge(n,this.optionsDefault);var i=$('<div class="charts-grid"/>');this.setElement(i),this._render(),this._filter("default")},value:function(e){var t=this.$el.find(".current").attr("id");e!==undefined&&(this.$el.find(".current").removeClass("current"),this.$el.find("#"+e).addClass("current"));var n=this.$el.find(".current").attr("id");return n===undefined?null:(n!=t&&this.options.onchange&&this.options.onchange(e),n)},_filter:function(e){var t=this.app.types.attributes;for(var n in t){var r=t[n],i=this.$el.find("#"+n),s=r.keywords||"";s.indexOf(e)==-1&&e!="all"?i.hide():i.show()}},_render:function(){var t={},n=this.app.types.attributes;for(var r in n){var i=n[r],s=i.category;t[s]||(t[s]={}),t[s][r]=i}for(var s in t){var o=$('<div style="clear: both;"/>');o.append(e.wrap(this._template_header({title:s})));for(var r in t[s]){var i=t[s][r];o.append(e.wrap(this._template_item({id:r,title:i.title+" ("+i.library+")",url:config.app_root+"charts/"+this.app.chartPath(r)+"/logo.png"})))}this.$el.append(e.wrap(o))}},_onclick:function(e){var t=this.value(),n=$(e.target).closest(".item").attr("id");n!=""&&n&&t!=n&&this.value(n)},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_template_header:function(e){return'<div class="header">• '+e.title+"<div>"},_template_item:function(e){return'<div id="'+e.id+'" class="item">'+'<img class="image" src="'+e.url+'">'+'<div class="title">'+e.title+"</div>"+"<div>"}})}),define("plugin/views/editor",["mvc/ui/ui-tabs","plugin/library/ui","mvc/ui/ui-portlet","utils/utils","plugin/models/chart","plugin/models/group","plugin/views/group","plugin/views/settings","plugin/views/types"],function(e,t,n,r,i,s,o,u,a){return Backbone.View.extend({optionsDefault:{header:!0,content:"No content available."},initialize:function(i,s){var o=this;this.app=i,this.chart=this.app.chart,this.options=r.merge(s,this.optionsDefault),this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Editor",operations:{save:new t.ButtonIcon({icon:"fa-save",tooltip:"Draw Chart",title:"Draw",onclick:function(){o._saveChart()}}),back:new t.ButtonIcon({icon:"fa-caret-left",tooltip:"Return to Viewer",title:"Cancel",onclick:function(){o.app.go("viewer"),o.app.storage.load()}})}}),this.types=new a(i,{onchange:function(e){var t=o.app.types.get(e);t||console.debug("FAILED - Editor::onchange() - Chart type not supported."),o.chart.definition=t,o.chart.settings.clear(),o.chart.set({type:e}),o.chart.set("modified",!0),console.debug("Editor::onchange() - Switched chart type.")},ondblclick:function(e){o._saveChart()}}),this.tabs=new e.View({title_new:"Add Data",onnew:function(){var e=o._addGroupModel();o.tabs.show(e.id)}}),this.title=new t.Input({placeholder:"Chart title",onchange:function(){o.chart.set("title",o.title.value())}});var f=$("<div/>");f.append(r.wrap((new t.Label({title:"Provide a chart title:"})).$el)),f.append(r.wrap(this.title.$el)),f.append(r.wrap((new t.Label({title:"Select a chart type:"})).$el)),f.append(r.wrap(this.types.$el)),this.tabs.add({id:"main",title:"Start",$el:f}),this.settings=new u(this.app),this.tabs.add({id:"settings",title:"Configuration",$el:this.settings.$el}),this.portlet.append(this.message.$el),this.portlet.append(this.tabs.$el),this.setElement(this.portlet.$el),this.tabs.hideOperation("back");var o=this;this.chart.on("change:title",function(e){o._refreshTitle()}),this.chart.on("change:type",function(e){o.types.value(e.get("type"))}),this.chart.on("reset",function(e){o._resetChart()}),this.app.chart.on("redraw",function(e){o.portlet.showOperation("back")}),this.app.chart.groups.on("add",function(e){o._addGroup(e)}),this.app.chart.groups.on("remove",function(e){o._removeGroup(e)}),this.app.chart.groups.on("reset",function(e){o._removeAllGroups()}),this.app.chart.groups.on("change:key",function(e){o._refreshGroupKey()}),this._resetChart()},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e),this.title.value(e)},_refreshGroupKey:function(){var e=this,t=0;this.chart.groups.each(function(n){var r=n.get("key","");r==""&&(r="Chart data"),e.tabs.title(n.id,++t+": "+r)})},_addGroupModel:function(){var e=new s({id:r.uuid()});return this.chart.groups.add(e),e},_addGroup:function(e){var t=this,n=new o(this.app,{group:e});this.tabs.add({id:e.id,$el:n.$el,ondel:function(){t.chart.groups.remove(e.id)}}),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeGroup:function(e){this.tabs.del(e.id),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeAllGroups:function(e){this.tabs.delRemovable()},_resetChart:function(){this.chart.set("id",r.uuid()),this.chart.set("type","highcharts_bar"),this.chart.set("dataset_id",this.app.options.config.dataset_id),this.chart.set("title","New Chart"),this.portlet.hideOperation("back")},_saveChart:function(){this.chart.set({type:this.types.value(),title:this.title.value(),date:r.time()});if(this.chart.groups.length==0){this.message.update({message:"Please select data columns before drawing the chart."});var e=this._addGroupModel();this.tabs.show(e.id);return}var t=this,n=!0,i=this.chart.definition;this.chart.groups.each(function(e){if(!n)return;for(var r in i.columns)if(e.attributes[r]=="null"){t.message.update({status:"danger",message:"This chart type requires column types not found in your tabular file."}),t.tabs.show(e.id),n=!1;return}});if(!n)return;this.app.go("viewer");var t=this;this.chart.deferred.execute(function(){t.app.storage.save(),t.chart.trigger("redraw")})}})}),define("plugin/models/config",[],function(){return Backbone.Model.extend({defaults:{query_limit:500,query_timeout:100,screenshot_url:"http://export.highcharts.com/"}})}),function(){function t(e,t){return(new Date(t,e+1,0)).getDate()}function n(e,t,n){return function(r,i,s){var o=e(r),u=[];o<r&&t(o);if(s>1)while(o<i){var a=new Date(+o);n(a)%s===0&&u.push(a),t(o)}else while(o<i)u.push(new Date(+o)),t(o);return u}}var e=window.nv||{};e.version="1.1.15b",e.dev=!0,window.nv=e,e.tooltip=e.tooltip||{},e.utils=e.utils||{},e.models=e.models||{},e.charts={},e.graphs=[],e.logs={},e.dispatch=d3.dispatch("render_start","render_end"),e.dev&&(e.dispatch.on("render_start",function(t){e.logs.startTime=+(new Date)}),e.dispatch.on("render_end",function(t){e.logs.endTime=+(new Date),e.logs.totalTime=e.logs.endTime-e.logs.startTime,e.log("total",e.logs.totalTime)})),e.log=function(){if(e.dev&&console.log&&console.log.apply)console.log.apply(console,arguments);else if(e.dev&&typeof console.log=="function"&&Function.prototype.bind){var t=Function.prototype.bind.call(console.log,console);t.apply(console,arguments)}return arguments[arguments.length-1]},e.render=function(n){n=n||1,e.render.active=!0,e.dispatch.render_start(),setTimeout(function(){var t,r;for(var i=0;i<n&&(r=e.render.queue[i]);i++)t=r.generate(),typeof r.callback==typeof Function&&r.callback(t),e.graphs.push(t);e.render.queue.splice(0,i),e.render.queue.length?setTimeout(arguments.callee,0):(e.dispatch.render_end(),e.render.active=!1)},0)},e.render.active=!1,e.render.queue=[],e.addGraph=function(t){typeof arguments[0]==typeof Function&&(t={generate:arguments[0],callback:arguments[1]}),e.render.queue.push(t),e.render.active||e.render()},e.identity=function(e){return e},e.strip=function(e){return e.replace(/(\s|&)/g,"")},d3.time.monthEnd=function(e){return new Date(e.getFullYear(),e.getMonth(),0)},d3.time.monthEnds=n(d3.time.monthEnd,function(e){e.setUTCDate(e.getUTCDate()+1),e.setDate(t(e.getMonth()+1,e.getFullYear()))},function(e){return e.getMonth()}),e.interactiveGuideline=function(){function c(o){o.each(function(o){function g(){var e=d3.mouse(this),n=e[0],r=e[1],o=!0,a=!1;l&&(n=d3.event.offsetX,r=d3.event.offsetY,d3.event.target.tagName!=="svg"&&(o=!1),d3.event.target.className.baseVal.match("nv-legend")&&(a=!0)),o&&(n-=i.left,r-=i.top);if(n<0||r<0||n>p||r>d||d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined||a){if(l&&d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined&&d3.event.relatedTarget.className.match(t.nvPointerEventsClass))return;u.elementMouseout({mouseX:n,mouseY:r}),c.renderGuideLine(null);return}var f=s.invert(n);u.elementMousemove({mouseX:n,mouseY:r,pointXValue:f}),d3.event.type==="dblclick"&&u.elementDblclick({mouseX:n,mouseY:r,pointXValue:f})}var h=d3.select(this),p=n||960,d=r||400,v=h.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([o]),m=v.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");m.append("g").attr("class","nv-interactiveGuideLine");if(!f)return;f.on("mousemove",g,!0).on("mouseout",g,!0).on("dblclick",g),c.renderGuideLine=function(t){if(!a)return;var n=v.select(".nv-interactiveGuideLine").selectAll("line").data(t!=null?[e.utils.NaNtoZero(t)]:[],String);n.enter().append("line").attr("class","nv-guideline").attr("x1",function(e){return e}).attr("x2",function(e){return e}).attr("y1",d).attr("y2",0),n.exit().remove()}})}var t=e.models.tooltip(),n=null,r=null,i={left:0,top:0},s=d3.scale.linear(),o=d3.scale.linear(),u=d3.dispatch("elementMousemove","elementMouseout","elementDblclick"),a=!0,f=null,l=navigator.userAgent.indexOf("MSIE")!==-1;return c.dispatch=u,c.tooltip=t,c.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.left=typeof e.left!="undefined"?e.left:i.left,c):i},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.xScale=function(e){return arguments.length?(s=e,c):s},c.showGuideLine=function(e){return arguments.length?(a=e,c):a},c.svgContainer=function(e){return arguments.length?(f=e,c):f},c},e.interactiveBisect=function(e,t,n){if(!e instanceof Array)return null;typeof n!="function"&&(n=function(e,t){return e.x});var r=d3.bisector(n).left,i=d3.max([0,r(e,t)-1]),s=n(e[i],i);typeof s=="undefined"&&(s=i);if(s===t)return i;var o=d3.min([i+1,e.length-1]),u=n(e[o],o);return typeof u=="undefined"&&(u=o),Math.abs(u-t)>=Math.abs(s-t)?i:o},e.nearestValueIndex=function(e,t,n){var r=Infinity,i=null;return e.forEach(function(e,s){var o=Math.abs(t-e);o<=r&&o<n&&(r=o,i=s)}),i},function(){window.nv.tooltip={},window.nv.models.tooltip=function(){function y(){if(a){var e=d3.select(a);e.node().tagName!=="svg"&&(e=e.select("svg"));var t=e.node()?e.attr("viewBox"):null;if(t){t=t.split(" ");var n=parseInt(e.style("width"))/t[2];l.left=l.left*n,l.top=l.top*n}}}function b(e){var t;a?t=d3.select(a):t=d3.select("body");var n=t.select(".nvtooltip");return n.node()===null&&(n=t.append("div").attr("class","nvtooltip "+(u?u:"xy-tooltip")).attr("id",h)),n.node().innerHTML=e,n.style("top",0).style("left",0).style("opacity",0),n.selectAll("div, table, td, tr").classed(p,!0),n.classed(p,!0),n.node()}function w(){if(!c)return;if(!g(n))return;y();var t=l.left,u=o!=null?o:l.top,h=b(m(n));f=h;if(a){var p=a.getElementsByTagName("svg")[0],d=p?p.getBoundingClientRect():a.getBoundingClientRect(),v={left:0,top:0};if(p){var E=p.getBoundingClientRect(),S=a.getBoundingClientRect(),x=E.top;if(x<0){var T=a.getBoundingClientRect();x=Math.abs(x)>T.height?0:x}v.top=Math.abs(x-S.top),v.left=Math.abs(E.left-S.left)}t+=a.offsetLeft+v.left-2*a.scrollLeft,u+=a.offsetTop+v.top-2*a.scrollTop}return s&&s>0&&(u=Math.floor(u/s)*s),e.tooltip.calcTooltipPosition([t,u],r,i,h),w}var t=null,n=null,r="w",i=50,s=25,o=null,u=null,a=null,f=null,l={left:null,top:null},c=!0,h="nvtooltip-"+Math.floor(Math.random()*1e5),p="nv-pointer-events-none",d=function(e,t){return e},v=function(e){return e},m=function(e){if(t!=null)return t;if(e==null)return"";var n=d3.select(document.createElement("table")),r=n.selectAll("thead").data([e]).enter().append("thead");r.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(v(e.value));var i=n.selectAll("tbody").data([e]).enter().append("tbody"),s=i.selectAll("tr").data(function(e){return e.series}).enter().append("tr").classed("highlight",function(e){return e.highlight});s.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(e){return e.color}),s.append("td").classed("key",!0).html(function(e){return e.key}),s.append("td").classed("value",!0).html(function(e,t){return d(e.value,t)}),s.selectAll("td").each(function(e){if(e.highlight){var t=d3.scale.linear().domain([0,1]).range(["#fff",e.color]),n=.6;d3.select(this).style("border-bottom-color",t(n)).style("border-top-color",t(n))}});var o=n.node().outerHTML;return e.footer!==undefined&&(o+="<div class='footer'>"+e.footer+"</div>"),o},g=function(e){return e&&e.series&&e.series.length>0?!0:!1};return w.nvPointerEventsClass=p,w.content=function(e){return arguments.length?(t=e,w):t},w.tooltipElem=function(){return f},w.contentGenerator=function(e){return arguments.length?(typeof e=="function"&&(m=e),w):m},w.data=function(e){return arguments.length?(n=e,w):n},w.gravity=function(e){return arguments.length?(r=e,w):r},w.distance=function(e){return arguments.length?(i=e,w):i},w.snapDistance=function(e){return arguments.length?(s=e,w):s},w.classes=function(e){return arguments.length?(u=e,w):u},w.chartContainer=function(e){return arguments.length?(a=e,w):a},w.position=function(e){return arguments.length?(l.left=typeof e.left!="undefined"?e.left:l.left,l.top=typeof e.top!="undefined"?e.top:l.top,w):l},w.fixedTop=function(e){return arguments.length?(o=e,w):o},w.enabled=function(e){return arguments.length?(c=e,w):c},w.valueFormatter=function(e){return arguments.length?(typeof e=="function"&&(d=e),w):d},w.headerFormatter=function(e){return arguments.length?(typeof e=="function"&&(v=e),w):v},w.id=function(){return h},w},e.tooltip.show=function(t,n,r,i,s,o){var u=document.createElement("div");u.className="nvtooltip "+(o?o:"xy-tooltip");var a=s;if(!s||s.tagName.match(/g|svg/i))a=document.getElementsByTagName("body")[0];u.style.left=0,u.style.top=0,u.style.opacity=0,u.innerHTML=n,a.appendChild(u),s&&(t[0]=t[0]-s.scrollLeft,t[1]=t[1]-s.scrollTop),e.tooltip.calcTooltipPosition(t,r,i,u)},e.tooltip.findFirstNonSVGParent=function(e){while(e.tagName.match(/^g|svg$/i)!==null)e=e.parentNode;return e},e.tooltip.findTotalOffsetTop=function(e,t){var n=t;do isNaN(e.offsetTop)||(n+=e.offsetTop);while(e=e.offsetParent);return n},e.tooltip.findTotalOffsetLeft=function(e,t){var n=t;do isNaN(e.offsetLeft)||(n+=e.offsetLeft);while(e=e.offsetParent);return n},e.tooltip.calcTooltipPosition=function(t,n,r,i){var s=parseInt(i.offsetHeight),o=parseInt(i.offsetWidth),u=e.utils.windowSize().width,a=e.utils.windowSize().height,f=window.pageYOffset,l=window.pageXOffset,c,h;a=window.innerWidth>=document.body.scrollWidth?a:a-16,u=window.innerHeight>=document.body.scrollHeight?u:u-16,n=n||"s",r=r||20;var p=function(t){return e.tooltip.findTotalOffsetTop(t,h)},d=function(t){return e.tooltip.findTotalOffsetLeft(t,c)};switch(n){case"e":c=t[0]-o-r,h=t[1]-s/2;var v=d(i),m=p(i);v<l&&(c=t[0]+r>l?t[0]+r:l-v+c),m<f&&(h=f-m+h),m+s>f+a&&(h=f+a-m+h-s);break;case"w":c=t[0]+r,h=t[1]-s/2;var v=d(i),m=p(i);v+o>u&&(c=t[0]-o-r),m<f&&(h=f+5),m+s>f+a&&(h=f+a-m+h-s);break;case"n":c=t[0]-o/2-5,h=t[1]+r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),m+s>f+a&&(h=f+a-m+h-s);break;case"s":c=t[0]-o/2,h=t[1]-s-r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),f>m&&(h=f);break;case"none":c=t[0],h=t[1]-r;var v=d(i),m=p(i)}return i.style.left=c+"px",i.style.top=h+"px",i.style.opacity=1,i.style.position="absolute",i},e.tooltip.cleanup=function(){var e=document.getElementsByClassName("nvtooltip"),t=[];while(e.length)t.push(e[0]),e[0].style.transitionDelay="0 !important",e[0].style.opacity=0,e[0].className="nvtooltip-pending-removal";setTimeout(function(){while(t.length){var e=t.pop();e.parentNode.removeChild(e)}},500)}}(),e.utils.windowSize=function(){var e={width:640,height:480};return document.body&&document.body.offsetWidth&&(e.width=document.body.offsetWidth,e.height=document.body.offsetHeight),document.compatMode=="CSS1Compat"&&document.documentElement&&document.documentElement.offsetWidth&&(e.width=document.documentElement.offsetWidth,e.height=document.documentElement.offsetHeight),window.innerWidth&&window.innerHeight&&(e.width=window.innerWidth,e.height=window.innerHeight),e},e.utils.windowResize=function(e){if(e===undefined)return;var t=window.onresize;window.onresize=function(n){typeof t=="function"&&t(n),e(n)}},e.utils.getColor=function(t){return arguments.length?Object.prototype.toString.call(t)==="[object Array]"?function(e,n){return e.color||t[n%t.length]}:t:e.utils.defaultColor()},e.utils.defaultColor=function(){var e=d3.scale.category20().range();return function(t,n){return t.color||e[n%e.length]}},e.utils.customTheme=function(e,t,n){t=t||function(e){return e.key},n=n||d3.scale.category20().range();var r=n.length;return function(i,s){var o=t(i);return r||(r=n.length),typeof e[o]!="undefined"?typeof e[o]=="function"?e[o]():e[o]:n[--r]}},e.utils.pjax=function(t,n){function r(r){d3.html(r,function(r){var i=d3.select(n).node();i.parentNode.replaceChild(d3.select(r).select(n).node(),i),e.utils.pjax(t,n)})}d3.selectAll(t).on("click",function(){history.pushState(this.href,this.textContent,this.href),r(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&r(d3.event.state)})},e.utils.calcApproxTextWidth=function(e){if(typeof e.style=="function"&&typeof e.text=="function"){var t=parseInt(e.style("font-size").replace("px","")),n=e.text().length;return n*t*.5}return 0},e.utils.NaNtoZero=function(e){return typeof e!="number"||isNaN(e)||e===null||e===Infinity?0:e},e.utils.optionsFunc=function(e){return e&&d3.map(e).forEach(function(e,t){typeof this[e]=="function"&&this[e](t)}.bind(this)),this},e.models.axis=function(){function m(e){return e.each(function(e){var i=d3.select(this),m=i.selectAll("g.nv-wrap.nv-axis").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),y=g.append("g"),b=m.select("g");p!==null?t.ticks(p):(t.orient()=="top"||t.orient()=="bottom")&&t.ticks(Math.abs(s.range()[1]-s.range()[0])/100),b.call(t),v=v||t.scale();var w=t.tickFormat();w==null&&(w=v.tickFormat());var E=b.selectAll("text.nv-axislabel").data([o||null]);E.exit().remove();switch(t.orient()){case"top":E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",0).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+s(e)+",0)"}).select("text").attr("dy","-0.5em").attr("y",-t.tickPadding()).attr("text-anchor","middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+s.range()[t]+",0)"})}break;case"bottom":var T=36,N=30,C=b.selectAll("g").select("text");if(f%360){C.each(function(e,t){var n=this.getBBox().width;n>N&&(N=n)});var k=Math.abs(Math.sin(f*Math.PI/180)),T=(k?k*N:N)+30;C.attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f%360>0?"start":"end")}E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",T).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data([s.domain()[0],s.domain()[s.domain().length-1]]);x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",t.tickPadding()).attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f?f%360>0?"start":"end":"middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"})}c&&C.attr("transform",function(e,t){return"translate(0,"+(t%2==0?"0":"12")+")"});break;case"right":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"begin").attr("transform",l?"rotate(90)":"").attr("y",l?-Math.max(n.right,r)+12:-10).attr("x",l?s.range()[0]/2:t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+s(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",t.tickPadding()).style("text-anchor","start").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}break;case"left":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"end").attr("transform",l?"rotate(-90)":"").attr("y",l?-Math.max(n.left,r)+d:-10).attr("x",l?-s.range()[0]/2:-t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+v(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-t.tickPadding()).attr("text-anchor","end").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}}E.text(function(e){return e}),u&&(t.orient()==="left"||t.orient()==="right")&&(b.selectAll("g").each(function(e,t){d3.select(this).select("text").attr("opacity",1);if(s(e)<s.range()[1]+10||s(e)>s.range()[0]-10)(e>1e-10||e<-1e-10)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0)}),s.domain()[0]==s.domain()[1]&&s.domain()[0]==0&&m.selectAll("g.nv-axisMaxMin").style("opacity",function(e,t){return t?0:1}));if(u&&(t.orient()==="top"||t.orient()==="bottom")){var L=[];m.selectAll("g.nv-axisMaxMin").each(function(e,t){try{t?L.push(s(e)-this.getBBox().width-4):L.push(s(e)+this.getBBox().width+4)}catch(n){t?L.push(s(e)-4):L.push(s(e)+4)}}),b.selectAll("g").each(function(e,t){if(s(e)<L[0]||s(e)>L[1])e>1e-10||e<-1e-10?d3.select(this).remove():d3.select(this).select("text").remove()})}a&&b.selectAll(".tick").filter(function(e){return!parseFloat(Math.round(e.__data__*1e5)/1e6)&&e.__data__!==undefined}).classed("zero",!0),v=s.copy()}),m}var t=d3.svg.axis(),n={top:0,right:0,bottom:0,left:0},r=75,i=60,s=d3.scale.linear(),o=null,u=!0,a=!0,f=0,l=!0,c=!1,h=!1,p=null,d=12;t.scale(s).orient("bottom").tickFormat(function(e){return e});var v;return m.axis=t,d3.rebind(m,t,"orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"),d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.ticks=function(e){return arguments.length?(p=e,m):p},m.height=function(e){return arguments.length?(i=e,m):i},m.axisLabel=function(e){return arguments.length?(o=e,m):o},m.showMaxMin=function(e){return arguments.length?(u=e,m):u},m.highlightZero=function(e){return arguments.length?(a=e,m):a},m.scale=function(e){return arguments.length?(s=e,t.scale(s),h=typeof s.rangeBands=="function",d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m):s},m.rotateYLabel=function(e){return arguments.length?(l=e,m):l},m.rotateLabels=function(e){return arguments.length?(f=e,m):f},m.staggerLabels=function(e){return arguments.length?(c=e,m):c},m.axisLabelDistance=function(e){return arguments.length?(d=e,m):d},m},e.models.historicalBar=function(){function w(E){return E.each(function(w){var E=n-t.left-t.right,S=r-t.top-t.bottom,T=d3.select(this);s.domain(d||d3.extent(w[0].values.map(u).concat(f))),c?s.range(m||[E*.5/w[0].values.length,E*(w[0].values.length-.5)/w[0].values.length]):s.range(m||[0,E]),o.domain(v||d3.extent(w[0].values.map(a).concat(l))).range(g||[S,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=T.selectAll("g.nv-wrap.nv-historicalBar-"+i).data([w[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+i),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-bars"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){y.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",E).attr("height",S),A.attr("clip-path",h?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-bars").selectAll(".nv-bar").data(function(e){return e},function(e,t){return u(e,t)});O.exit().remove();var M=O.enter().append("rect").attr("x",0).attr("y",function(t,n){return e.utils.NaNtoZero(o(Math.max(0,a(t,n))))}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.abs(o(a(t,n))-o(0)))}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).on("mouseover",function(e,t){if(!b)return;d3.select(this).classed("hover",!0),y.elementMouseover({point:e,series:w[0],pos:[s(u(e,t)),o(a(e,t))],pointIndex:t,seriesIndex:0,e:d3.event})}).on("mouseout",function(e,t){if(!b)return;d3.select(this).classed("hover",!1),y.elementMouseout({point:e,series:w[0],pointIndex:t,seriesIndex:0,e:d3.event})}).on("click",function(e,t){if(!b)return;y.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){if(!b)return;y.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("fill",function(e,t){return p(e,t)}).attr("class",function(e,t,n){return(a(e,t)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+n+"-"+t}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).attr("width",E/w[0].values.length*.9),O.attr("y",function(t,n){var r=a(t,n)<0?o(0):o(0)-o(a(t,n))<1?o(0)-1:o(a(t,n));return e.utils.NaNtoZero(r)}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.max(Math.abs(o(a(t,n))-o(0)),1))})}),w}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[],l=[0],c=!1,h=!0,p=e.utils.defaultColor(),d,v,m,g,y=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),b=!0;return w.highlightPoint=function(e,t){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar-0-"+e).classed("hover",t)},w.clearHighlights=function(){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar.hover").classed("hover",!1)},w.dispatch=y,w.options=e.utils.optionsFunc.bind(w),w.x=function(e){return arguments.length?(u=e,w):u},w.y=function(e){return arguments.length?(a=e,w):a},w.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,w):t},w.width=function(e){return arguments.length?(n=e,w):n},w.height=function(e){return arguments.length?(r=e,w):r},w.xScale=function(e){return arguments.length?(s=e,w):s},w.yScale=function(e){return arguments.length?(o=e,w):o},w.xDomain=function(e){return arguments.length?(d=e,w):d},w.yDomain=function(e){return arguments.length?(v=e,w):v},w.xRange=function(e){return arguments.length?(m=e,w):m},w.yRange=function(e){return arguments.length?(g=e,w):g},w.forceX=function(e){return arguments.length?(f=e,w):f},w.forceY=function(e){return arguments.length?(l=e,w):l},w.padData=function(e){return arguments.length?(c=e,w):c},w.clipEdge=function(e){return arguments.length?(h=e,w):h},w.color=function(t){return arguments.length?(p=e.utils.getColor(t),w):p},w.id=function(e){return arguments.length?(i=e,w):i},w.interactive=function(e){return arguments.length?(b=!1,w):b},w},e.models.bullet=function(){function m(e){return e.each(function(e,n){var p=c-t.left-t.right,m=h-t.top-t.bottom,g=d3.select(this),y=i.call(this,e,n).slice().sort(d3.descending),b=s.call(this,e,n).slice().sort(d3.descending),w=o.call(this,e,n).slice().sort(d3.descending),E=u.call(this,e,n).slice(),S=a.call(this,e,n).slice(),x=f.call(this,e,n).slice(),T=d3.scale.linear().domain(d3.extent(d3.merge([l,y]))).range(r?[p,0]:[0,p]),N=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(T.range());this.__chart__=T;var C=d3.min(y),k=d3.max(y),L=y[1],A=g.selectAll("g.nv-wrap.nv-bullet").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),M=O.append("g"),_=A.select("g");M.append("rect").attr("class","nv-range nv-rangeMax"),M.append("rect").attr("class","nv-range nv-rangeAvg"),M.append("rect").attr("class","nv-range nv-rangeMin"),M.append("rect").attr("class","nv-measure"),M.append("path").attr("class","nv-markerTriangle"),A.attr("transform","translate("+t.left+","+t.top+")");var D=function(e){return Math.abs(N(e)-N(0))},P=function(e){return Math.abs(T(e)-T(0))},H=function(e){return e<0?N(e):N(0)},B=function(e){return e<0?T(e):T(0)};_.select("rect.nv-rangeMax").attr("height",m).attr("width",P(k>0?k:C)).attr("x",B(k>0?k:C)).datum(k>0?k:C),_.select("rect.nv-rangeAvg").attr("height",m).attr("width",P(L)).attr("x",B(L)).datum(L),_.select("rect.nv-rangeMin").attr("height",m).attr("width",P(k)).attr("x",B(k)).attr("width",P(k>0?C:k)).attr("x",B(k>0?C:k)).datum(k>0?C:k),_.select("rect.nv-measure").style("fill",d).attr("height",m/3).attr("y",m/3).attr("width",w<0?T(0)-T(w[0]):T(w[0])-T(0)).attr("x",B(w)).on("mouseover",function(){v.elementMouseover({value:w[0],label:x[0]||"Current",pos:[T(w[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:w[0],label:x[0]||"Current"})});var j=m/6;b[0]?_.selectAll("path.nv-markerTriangle").attr("transform",function(e){return"translate("+T(b[0])+","+m/2+")"}).attr("d","M0,"+j+"L"+j+","+ -j+" "+ -j+","+ -j+"Z").on("mouseover",function(){v.elementMouseover({value:b[0],label:S[0]||"Previous",pos:[T(b[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:b[0],label:S[0]||"Previous"})}):_.selectAll("path.nv-markerTriangle").remove(),A.selectAll(".nv-range").on("mouseover",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseover({value:e,label:n,pos:[T(e),m/2]})}).on("mouseout",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseout({value:e,label:n})})}),m}var t={top:0,right:0,bottom:0,left:0},n="left",r=!1,i=function(e){return e.ranges},s=function(e){return e.markers},o=function(e){return e.measures},u=function(e){return e.rangeLabels?e.rangeLabels:[]},a=function(e){return e.markerLabels?e.markerLabels:[]},f=function(e){return e.measureLabels?e.measureLabels:[]},l=[0],c=380,h=30,p=null,d=e.utils.getColor(["#1f77b4"]),v=d3.dispatch("elementMouseover","elementMouseout");return m.dispatch=v,m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(i=e,m):i},m.markers=function(e){return arguments.length?(s=e,m):s},m.measures=function(e){return arguments.length?(o=e,m):o},m.forceX=function(e){return arguments.length?(l=e,m):l},m.width=function(e){return arguments.length?(c=e,m):c},m.height=function(e){return arguments.length?(h=e,m):h},m.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,m):t},m.tickFormat=function(e){return arguments.length?(p=e,m):p},m.color=function(t){return arguments.length?(d=e.utils.getColor(t),m):d},m},e.models.bulletChart=function(){function m(e){return e.each(function(n,h){var g=d3.select(this),y=(a||parseInt(g.style("width"))||960)-i.left-i.right,b=f-i.top-i.bottom,w=this;m.update=function(){m(e)},m.container=this;if(!n||!s.call(this,n,h)){var E=g.selectAll(".nv-noData").data([p]);return E.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),E.attr("x",i.left+y/2).attr("y",18+i.top+b/2).text(function(e){return e}),m}g.selectAll(".nv-noData").remove();var S=s.call(this,n,h).slice().sort(d3.descending),x=o.call(this,n,h).slice().sort(d3.descending),T=u.call(this,n,h).slice().sort(d3.descending),N=g.selectAll("g.nv-wrap.nv-bulletChart").data([n]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-bulletWrap"),k.append("g").attr("class","nv-titles"),N.attr("transform","translate("+i.left+","+i.top+")");var A=d3.scale.linear().domain([0,Math.max(S[0],x[0],T[0])]).range(r?[y,0]:[0,y]),O=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(A.range());this.__chart__=A;var M=function(e){return Math.abs(O(e)-O(0))},_=function(e){return Math.abs(A(e)-A(0))},D=k.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(f-i.top-i.bottom)/2+")");D.append("text").attr("class","nv-title").text(function(e){return e.title}),D.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(e){return e.subtitle}),t.width(y).height(b);var P=L.select(".nv-bulletWrap");d3.transition(P).call(t);var H=l||A.tickFormat(y/100),B=L.selectAll("g.nv-tick").data(A.ticks(y/50),function(e){return this.textContent||H(e)}),j=B.enter().append("g").attr("class","nv-tick").attr("transform",function(e){return"translate("+O(e)+",0)"}).style("opacity",1e-6);j.append("line").attr("y1",b).attr("y2",b*7/6),j.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",b*7/6).text(H);var F=d3.transition(B).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1);F.select("line").attr("y1",b).attr("y2",b*7/6),F.select("text").attr("y",b*7/6),d3.transition(B.exit()).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1e-6).remove(),d.on("tooltipShow",function(e){e.key=n.title,c&&v(e,w.parentNode)})}),d3.timer.flush(),m}var t=e.models.bullet(),n="left",r=!1,i={top:5,right:40,bottom:20,left:120},s=function(e){return e.ranges},o=function(e){return e.markers},u=function(e){return e.measures},a=null,f=55,l=null,c=!0,h=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},p="No Data Available.",d=d3.dispatch("tooltipShow","tooltipHide"),v=function(t,n){var r=t.pos[0]+(n.offsetLeft||0)+i.left,s=t.pos[1]+(n.offsetTop||0)+i.top,o=h(t.key,t.label,t.value,t,m);e.tooltip.show([r,s],o,t.value<0?"e":"w",null,n)};return t.dispatch.on("elementMouseover.tooltip",function(e){d.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){d.tooltipHide(e)}),d.on("tooltipHide",function(){c&&e.tooltip.cleanup()}),m.dispatch=d,m.bullet=t,d3.rebind(m,t,"color"),m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(s=e,m):s},m.markers=function(e){return arguments.length?(o=e,m):o},m.measures=function(e){return arguments.length?(u=e,m):u},m.width=function(e){return arguments.length?(a=e,m):a},m.height=function(e){return arguments.length?(f=e,m):f},m.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,m):i},m.tickFormat=function(e){return arguments.length?(l=e,m):l},m.tooltips=function(e){return arguments.length?(c=e,m):c},m.tooltipContent=function(e){return arguments.length?(h=e,m):h},m.noData=function(e){return arguments.length?(p=e,m):p},m},e.models.cumulativeLineChart=function(){function D(b){return b.each(function(b){function I(e,t){d3.select(D.container).style("cursor","ew-resize")}function q(e,t){M.x=d3.event.x,M.i=Math.round(O.invert(M.x)),nt()}function R(e,t){d3.select(D.container).style("cursor","auto"),x.index=M.i,k.stateChange(x)}function nt(){tt.data([M]);var e=D.transitionDuration();D.transitionDuration(0),D.update(),D.transitionDuration(e)}var L=d3.select(this).classed("nv-chart-"+S,!0),A=this,H=(f||parseInt(L.style("width"))||960)-u.left-u.right,B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom;D.update=function(){L.call(D)},D.container=this,x.disabled=b.map(function(e){return!!e.disabled});if(!T){var j;T={};for(j in x)x[j]instanceof Array?T[j]=x[j].slice(0):T[j]=x[j]}var F=d3.behavior.drag().on("dragstart",I).on("drag",q).on("dragend",R);if(!b||!b.length||!b.filter(function(e){return e.values.length}).length){var U=L.selectAll(".nv-noData").data([N]);return U.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),U.attr("x",u.left+H/2).attr("y",u.top+B/2).text(function(e){return e}),D}L.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();if(!y){var z=b.filter(function(e){return!e.disabled}).map(function(e,n){var r=d3.extent(e.values,t.y());return r[0]<-0.95&&(r[0]=-0.95),[(r[0]-r[1])/(1+r[1]),(r[1]-r[0])/(1+r[0])]}),W=[d3.min(z,function(e){return e[0]}),d3.max(z,function(e){return e[1]})];t.yDomain(W)}else t.yDomain(null);O.domain([0,b[0].values.length-1]).range([0,H]).clamp(!0);var b=P(M.i,b),X=g?"none":"all",V=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([b]),$=V.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),J=V.select("g");$.append("g").attr("class","nv-interactive"),$.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),$.append("g").attr("class","nv-y nv-axis"),$.append("g").attr("class","nv-background"),$.append("g").attr("class","nv-linesWrap").style("pointer-events",X),$.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),$.append("g").attr("class","nv-legendWrap"),$.append("g").attr("class","nv-controlsWrap"),c&&(i.width(H),J.select(".nv-legendWrap").datum(b).call(i),u.top!=i.height()&&(u.top=i.height(),B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom),J.select(".nv-legendWrap").attr("transform","translate(0,"+ -u.top+")"));if(m){var K=[{key:"Re-scale y-axis",disabled:!y}];s.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),J.select(".nv-controlsWrap").datum(K).attr("transform","translate(0,"+ -u.top+")").call(s)}V.attr("transform","translate("+u.left+","+u.top+")"),d&&J.select(".nv-y.nv-axis").attr("transform","translate("+H+",0)");var Q=b.filter(function(e){return e.tempDisabled});V.select(".tempDisabled").remove(),Q.length&&V.append("text").attr("class","tempDisabled").attr("x",H/2).attr("y","-.71em").style("text-anchor","end").text(Q.map(function(e){return e.key}).join(", ")+" values cannot be calculated for this time period."),g&&(o.width(H).height(B).margin({left:u.left,top:u.top}).svgContainer(L).xScale(w),V.select(".nv-interactive").call(o)),$.select(".nv-background").append("rect"),J.select(".nv-background rect").attr("width",H).attr("height",B),t.y(function(e){return e.display.y}).width(H).height(B).color(b.map(function(e,t){return e.color||a(e,t)}).filter(function(e,t){return!b[t].disabled&&!b[t].tempDisabled}));var G=J.select(".nv-linesWrap").datum(b.filter(function(e){return!e.disabled&&!e.tempDisabled}));G.call(t),b.forEach(function(e,t){e.seriesIndex=t});var Y=b.filter(function(e){return!e.disabled&&!!C(e)}),Z=J.select(".nv-avgLinesWrap").selectAll("line").data(Y,function(e){return e.key}),et=function(e){var t=E(C(e));return t<0?0:t>B?B:t};Z.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(e,n){return t.color()(e,e.seriesIndex)}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.style("stroke-opacity",function(e){var t=E(C(e));return t<0||t>B?0:1}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.exit().remove();var tt=G.selectAll(".nv-indexLine").data([M]);tt.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(F),tt.attr("transform",function(e){return"translate("+O(e.i)+",0)"}).attr("height",B),h&&(n.scale(w).ticks(Math.min(b[0].values.length,H/70)).tickSize(-B,0),J.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),d3.transition(J.select(".nv-x.nv-axis")).call(n)),p&&(r.scale(E).ticks(B/36).tickSize(-H,0),d3.transition(J.select(".nv-y.nv-axis")).call(r)),J.select(".nv-background rect").on("click",function(){M.x=d3.mouse(this)[0],M.i=Math.round(O.invert(M.x)),x.index=M.i,k.stateChange(x),nt()}),t.dispatch.on("elementClick",function(e){M.i=e.pointIndex,M.x=O(M.i),x.index=M.i,k.stateChange(x),nt()}),s.dispatch.on("legendClick",function(e,t){e.disabled=!e.disabled,y=!e.disabled,x.rescaleY=y,k.stateChange(x),D.update()}),i.dispatch.on("stateChange",function(e){x.disabled=e.disabled,k.stateChange(x),D.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,f,l,c=[];b.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,D.x()),t.highlightPoint(r,f,!0);var o=n.values[f];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof l=="undefined"&&(l=D.xScale()(D.x()(o,f))),c.push({key:n.key,value:D.y()(o,f),color:a(n,n.seriesIndex)})});if(c.length>2){var h=D.yScale().invert(i.mouseY),p=Math.abs(D.yScale().domain()[0]-D.yScale().domain()[1]),d=.03*p,m=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);m!==null&&(c[m].highlight=!0)}var g=n.tickFormat()(D.x()(s,f),f);o.tooltip.position({left:l+u.left,top:i.mouseY+u.top}).chartContainer(A.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:g,series:c})(),o.renderGuideLine(l)}),o.dispatch.on("elementMouseout",function(e){k.tooltipHide(),t.clearHighlights()}),k.on("tooltipShow",function(e){v&&_(e,A.parentNode)}),k.on("changeState",function(e){typeof e.disabled!="undefined"&&(b.forEach(function(t,n){t.disabled=e.disabled[n]}),x.disabled=e.disabled),typeof e.index!="undefined"&&(M.i=e.index,M.x=O(M.i),x.index=e.index,tt.data([M])),typeof e.rescaleY!="undefined"&&(y=e.rescaleY),D.update()})}),D}function P(e,n){return n.map(function(n,r){if(!n.values)return n;var i=n.values[e];if(i==null)return n;var s=t.y()(i,e);return s<-0.95&&!A?(n.tempDisabled=!0,n):(n.tempDisabled=!1,n.values=n.values.map(function(e,n){return e.display={y:(t.y()(e,n)-s)/(1+s)},e}),n)})}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:30,bottom:50,left:60},a=e.utils.defaultColor(),f=null,l=null,c=!0,h=!0,p=!0,d=!1,v=!0,m=!0,g=!1,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},w,E,S=t.id(),x={index:0,rescaleY:y},T=null,N="No Data Available.",C=function(e){return e.average},k=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),L=0,A=!1;n.orient("bottom").tickPadding(7),r.orient(d?"right":"left"),s.updateState(!1);var O=d3.scale.linear(),M={i:0,x:0},_=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,D);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],k.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){k.tooltipHide(e)}),k.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),D.dispatch=k,D.lines=t,D.legend=i,D.xAxis=n,D.yAxis=r,D.interactiveLayer=o,d3.rebind(D,t,"defined","isArea","x","y","xScale","yScale","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id"),D.options=e.utils.optionsFunc.bind(D),D.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,D):u},D.width=function(e){return arguments.length?(f=e,D):f},D.height=function(e){return arguments.length?(l=e,D):l},D.color=function(t){return arguments.length?(a=e.utils.getColor(t),i.color(a),D):a},D.rescaleY=function(e){return arguments.length?(y=e,D):y},D.showControls=function(e){return arguments.length?(m=e,D):m},D.useInteractiveGuideline=function(e){return arguments.length?(g=e,e===!0&&(D.interactive(!1),D.useVoronoi(!1)),D):g},D.showLegend=function(e){return arguments.length?(c=e,D):c},D.showXAxis=function(e){return arguments.length?(h=e,D):h},D.showYAxis=function(e){return arguments.length?(p=e,D):p},D.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),D):d},D.tooltips=function(e){return arguments.length?(v=e,D):v},D.tooltipContent=function(e){return arguments.length?(b=e,D):b},D.state=function(e){return arguments.length?(x=e,D):x},D.defaultState=function(e){return arguments.length?(T=e,D):T},D.noData=function(e){return arguments.length?(N=e,D):N},D.average=function(e){return arguments.length?(C=e,D):C},D.transitionDuration=function(e){return arguments.length?(L=e,D):L},D.noErrorCheck=function(e){return arguments.length?(A=e,D):A},D},e.models.discreteBar=function(){function E(e){return e.each(function(e){var i=n-t.left-t.right,E=r-t.top-t.bottom,S=d3.select(this);e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var T=p&&d?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0}})});s.domain(p||d3.merge(T).map(function(e){return e.x})).rangeBands(v||[0,i],.1),o.domain(d||d3.extent(d3.merge(T).map(function(e){return e.y}).concat(f))),c?o.range(m||[E-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]):o.range(m||[E,0]),b=b||s,w=w||o.copy().range([o(0),o(0)]);var N=S.selectAll("g.nv-wrap.nv-discretebar").data([e]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-groups"),N.attr("transform","translate("+t.left+","+t.top+")");var A=N.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),A.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),A.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),A.style("stroke-opacity",1).style("fill-opacity",.75);var O=A.selectAll("g.nv-bar").data(function(e){return e.values});O.exit().remove();var M=O.enter().append("g").attr("transform",function(e,t,n){return"translate("+(s(u(e,t))+s.rangeBand()*.05)+", "+o(0)+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),g.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),g.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){g.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){g.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()});M.append("rect").attr("height",0).attr("width",s.rangeBand()*.9/e.length),c?(M.append("text").attr("text-anchor","middle"),O.select("text").text(function(e,t){return h(a(e,t))}).attr("x",s.rangeBand()*.9/2).attr("y",function(e,t){return a(e,t)<0?o(a(e,t))-o(0)+12:-4})):O.selectAll("text").remove(),O.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(e,t){return e.color||l(e,t)}).style("stroke",function(e,t){return e.color||l(e,t)}).select("rect").attr("class",y).attr("width",s.rangeBand()*.9/e.length),O.attr("transform",function(e,t){var n=s(u(e,t))+s.rangeBand()*.05,r=a(e,t)<0?o(0):o(0)-o(a(e,t))<1?o(0)-1:o(a(e,t));return"translate("+n+", "+r+")"}).select("rect").attr("height",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(d&&d[0]||0))||1)}),b=s.copy(),w=o.copy()}),E}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=!1,h=d3.format(",.2f"),p,d,v,m,g=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),y="discreteBar",b,w;return E.dispatch=g,E.options=e.utils.optionsFunc.bind(E),E.x=function(e){return arguments.length?(u=e,E):u},E.y=function(e){return arguments.length?(a=e,E):a},E.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,E):t},E.width=function(e){return arguments.length?(n=e,E):n},E.height=function(e){return arguments.length?(r=e,E):r},E.xScale=function(e){return arguments.length?(s=e,E):s},E.yScale=function(e){return arguments.length?(o=e,E):o},E.xDomain=function(e){return arguments.length?(p=e,E):p},E.yDomain=function(e){return arguments.length?(d=e,E):d},E.xRange=function(e){return arguments.length?(v=e,E):v},E.yRange=function(e){return arguments.length?(m=e,E):m},E.forceY=function(e){return arguments.length?(f=e,E):f},E.color=function(t){return arguments.length?(l=e.utils.getColor(t),E):l},E.id=function(e){return arguments.length?(i=e,E):i},E.showValues=function(e){return arguments.length?(c=e,E):c},E.valueFormat=function(e){return arguments.length?(h=e,E):h},E.rectClass=function(e){return arguments.length?(y=e,E):y},E},e.models.discreteBarChart=function(){function w(e){return e.each(function(e){var u=d3.select(this),p=this,y=(s||parseInt(u.style("width"))||960)-i.left-i.right,E=(o||parseInt(u.style("height"))||400)-i.top-i.bottom;w.update=function(){g.beforeUpdate(),u.call(w)},w.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var S=u.selectAll(".nv-noData").data([m]);return S.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),S.attr("x",i.left+y/2).attr("y",i.top+E/2).text(function(e){return e}),w}u.selectAll(".nv-noData").remove(),d=t.xScale(),v=t.yScale().clamp(!0);var T=u.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),C=N.append("defs"),k=T.select("g");N.append("g").attr("class","nv-x nv-axis"),N.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),N.append("g").attr("class","nv-barsWrap"),k.attr("transform","translate("+i.left+","+i.top+")"),l&&k.select(".nv-y.nv-axis").attr("transform","translate("+y+",0)"),t.width(y).height(E);var L=k.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));L.call(t),C.append("clipPath").attr("id","nv-x-label-clip-"+t.id()).append("rect"),k.select("#nv-x-label-clip-"+t.id()+" rect").attr("width",d.rangeBand()*(c?2:1)).attr("height",16).attr("x",-d.rangeBand()/(c?1:2));if(a){n.scale(d).ticks(y/100).tickSize(-E,0),k.select(".nv-x.nv-axis").attr("transform","translate(0,"+(v.range()[0]+(t.showValues()&&v.domain()[0]<0?16:0))+")"),k.select(".nv-x.nv-axis").call(n);var A=k.select(".nv-x.nv-axis").selectAll("g");c&&A.selectAll("text").attr("transform",function(e,t,n){return"translate(0,"+(n%2==0?"5":"17")+")"})}f&&(r.scale(v).ticks(E/36).tickSize(-y,0),k.select(".nv-y.nv-axis").call(r)),k.select(".nv-zeroLine line").attr("x1",0).attr("x2",y).attr("y1",v(0)).attr("y2",v(0)),g.on("tooltipShow",function(e){h&&b(e,p.parentNode)})}),w}var t=e.models.discreteBar(),n=e.models.axis(),r=e.models.axis(),i={top:15,right:10,bottom:50,left:60},s=null,o=null,u=e.utils.getColor(),a=!0,f=!0,l=!1,c=!1,h=!0,p=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},d,v,m="No Data Available.",g=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate"),y=0;n.orient("bottom").highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(l?"right":"left").tickFormat(d3.format(",.1f"));var b=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=p(i.series.key,a,f,i,w);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+i.left,e.pos[1]+i.top],g.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){g.tooltipHide(e)}),g.on("tooltipHide",function(){h&&e.tooltip.cleanup()}),w.dispatch=g,w.discretebar=t,w.xAxis=n,w.yAxis=r,d3.rebind(w,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","id","showValues","valueFormat"),w.options=e.utils.optionsFunc.bind(w),w.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,w):i},w.width=function(e){return arguments.length?(s=e,w):s},w.height=function(e){return arguments.length?(o=e,w):o},w.color=function(n){return arguments.length?(u=e.utils.getColor(n),t.color(u),w):u},w.showXAxis=function(e){return arguments.length?(a=e,w):a},w.showYAxis=function(e){return arguments.length?(f=e,w):f},w.rightAlignYAxis=function(e){return arguments.length?(l=e,r.orient(e?"right":"left"),w):l},w.staggerLabels=function(e){return arguments.length?(c=e,w):c},w.tooltips=function(e){return arguments.length?(h=e,w):h},w.tooltipContent=function(e){return arguments.length?(p=e,w):p},w.noData=function(e){return arguments.length?(m=e,w):m},w.transitionDuration=function(e){return arguments.length?(y=e,w):y},w},e.models.distribution=function(){function l(e){return e.each(function(e){var a=n-(i==="x"?t.left+t.right:t.top+t.bottom),l=i=="x"?"y":"x",c=d3.select(this);f=f||u;var h=c.selectAll("g.nv-distribution").data([e]),p=h.enter().append("g").attr("class","nvd3 nv-distribution"),d=p.append("g"),v=h.select("g");h.attr("transform","translate("+t.left+","+t.top+")");var m=v.selectAll("g.nv-dist").data(function(e){return e},function(e){return e.key});m.enter().append("g"),m.attr("class",function(e,t){return"nv-dist nv-series-"+t}).style("stroke",function(e,t){return o(e,t)});var g=m.selectAll("line.nv-dist"+i).data(function(e){return e.values});g.enter().append("line").attr(i+"1",function(e,t){return f(s(e,t))}).attr(i+"2",function(e,t){return f(s(e,t))}),m.exit().selectAll("line.nv-dist"+i).attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}).style("stroke-opacity",0).remove(),g.attr("class",function(e,t){return"nv-dist"+i+" nv-dist"+i+"-"+t}).attr(l+"1",0).attr(l+"2",r),g.attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}),f=u.copy()}),l}var t={top:0,right:0,bottom:0,left:0},n=400,r=8,i="x",s=function(e){return e[i]},o=e.utils.defaultColor(),u=d3.scale.linear(),a,f;return l.options=e.utils.optionsFunc.bind(l),l.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,l):t},l.width=function(e){return arguments.length?(n=e,l):n},l.axis=function(e){return arguments.length?(i=e,l):i},l.size=function(e){return arguments.length?(r=e,l):r},l.getData=function(e){return arguments.length?(s=d3.functor(e),l):s},l.scale=function(e){return arguments.length?(u=e,l):u},l.color=function(t){return arguments.length?(o=e.utils.getColor(t),l):o},l},e.models.historicalBarChart=function(){function x(e){return e.each(function(d){var E=d3.select(this),T=this,N=(u||parseInt(E.style("width"))||960)-s.left-s.right,C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom;x.update=function(){E.call(x)},x.container=this,g.disabled=d.map(function(e){return!!e.disabled});if(!y){var k;y={};for(k in g)g[k]instanceof Array?y[k]=g[k].slice(0):y[k]=g[k]}if(!d||!d.length||!d.filter(function(e){return e.values.length}).length){var L=E.selectAll(".nv-noData").data([b]);return L.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),L.attr("x",s.left+N/2).attr("y",s.top+C/2).text(function(e){return e}),x}E.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale();var A=E.selectAll("g.nv-wrap.nv-historicalBarChart").data([d]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),M=A.select("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-barsWrap"),O.append("g").attr("class","nv-legendWrap"),f&&(i.width(N),M.select(".nv-legendWrap").datum(d).call(i),s.top!=i.height()&&(s.top=i.height(),C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom),A.select(".nv-legendWrap").attr("transform","translate(0,"+ -s.top+")")),A.attr("transform","translate("+s.left+","+s.top+")"),h&&M.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)"),t.width(N).height(C).color(d.map(function(e,t){return e.color||o(e,t)}).filter(function(e,t){return!d[t].disabled}));var _=M.select(".nv-barsWrap").datum(d.filter(function(e){return!e.disabled}));_.call(t),l&&(n.scale(v).tickSize(-C,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+m.range()[0]+")"),M.select(".nv-x.nv-axis").call(n)),c&&(r.scale(m).ticks(C/36).tickSize(-N,0),M.select(".nv-y.nv-axis").call(r)),i.dispatch.on("legendClick",function(t,n){t.disabled=!t.disabled,d.filter(function(e){return!e.disabled}).length||d.map(function(e){return e.disabled=!1,A.selectAll(".nv-series").classed("disabled",!1),e}),g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),e.call(x)}),i.dispatch.on("legendDblclick",function(e){d.forEach(function(e){e.disabled=!0}),e.disabled=!1,g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),x.update()}),w.on("tooltipShow",function(e){p&&S(e,T.parentNode)}),w.on("changeState",function(e){typeof e.disabled!="undefined"&&(d.forEach(function(t,n){t.disabled=e.disabled[n]}),g.disabled=e.disabled),x.update()})}),x}var t=e.models.historicalBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s={top:30,right:90,bottom:50,left:90},o=e.utils.defaultColor(),u=null,a=null,f=!1,l=!0,c=!0,h=!1,p=!0,d=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},v,m,g={},y=null,b="No Data Available.",w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),E=0;n.orient("bottom").tickPadding(7),r.orient(h?"right":"left");var S=function(i,s){if(s){var o=d3.select(s).select("svg"),u=o.node()?o.attr("viewBox"):null;if(u){u=u.split(" ");var a=parseInt(o.style("width"))/u[2];i.pos[0]=i.pos[0]*a,i.pos[1]=i.pos[1]*a}}var f=i.pos[0]+(s.offsetLeft||0),l=i.pos[1]+(s.offsetTop||0),c=n.tickFormat()(t.x()(i.point,i.pointIndex)),h=r.tickFormat()(t.y()(i.point,i.pointIndex)),p=d(i.series.key,c,h,i,x);e.tooltip.show([f,l],p,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+s.left,e.pos[1]+s.top],w.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){w.tooltipHide(e)}),w.on("tooltipHide",function(){p&&e.tooltip.cleanup()}),x.dispatch=w,x.bars=t,x.legend=i,x.xAxis=n,x.yAxis=r,d3.rebind(x,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id","interpolate","highlightPoint","clearHighlights","interactive"),x.options=e.utils.optionsFunc.bind(x),x.margin=function(e){return arguments.length?(s.top=typeof e.top!="undefined"?e.top:s.top,s.right=typeof e.right!="undefined"?e.right:s.right,s.bottom=typeof e.bottom!="undefined"?e.bottom:s.bottom,s.left=typeof e.left!="undefined"?e.left:s.left,x):s},x.width=function(e){return arguments.length?(u=e,x):u},x.height=function(e){return arguments.length?(a=e,x):a},x.color=function(t){return arguments.length?(o=e.utils.getColor(t),i.color(o),x):o},x.showLegend=function(e){return arguments.length?(f=e,x):f},x.showXAxis=function(e){return arguments.length?(l=e,x):l},x.showYAxis=function(e){return arguments.length?(c=e,x):c},x.rightAlignYAxis=function(e){return arguments.length?(h=e,r.orient(e?"right":"left"),x):h},x.tooltips=function(e){return arguments.length?(p=e,x):p},x.tooltipContent=function(e){return arguments.length?(d=e,x):d},x.state=function(e){return arguments.length?(g=e,x):g},x.defaultState=function(e){return arguments.length?(y=e,x):y},x.noData=function(e){return arguments.length?(b=e,x):b},x.transitionDuration=function(e){return arguments.length?(E=e,x):E},x},e.models.indentedTree=function(){function g(e){return e.each(function(e){function k(e,t,n){d3.event.stopPropagation();if(d3.event.shiftKey&&!n)return d3.event.shiftKey=!1,e.values&&e.values.forEach(function(e){(e.values||e._values)&&k(e,0,!0)}),!0;if(!O(e))return!0;e.values?(e._values=e.values,e.values=null):(e.values=e._values,e._values=null),g.update()}function L(e){return e._values&&e._values.length?h:e.values&&e.values.length?p:""}function A(e){return e._values&&e._values.length}function O(e){var t=e.values||e._values;return t&&t.length}var t=1,n=d3.select(this),i=d3.layout.tree().children(function(e){return e.values}).size([r,f]);g.update=function(){n.call(g)},e[0]||(e[0]={key:a});var s=i.nodes(e[0]),y=d3.select(this).selectAll("div").data([[s]]),b=y.enter().append("div").attr("class","nvd3 nv-wrap nv-indentedtree"),w=b.append("table"),E=y.select("table").attr("width","100%").attr("class",c);if(o){var S=w.append("thead"),x=S.append("tr");l.forEach(function(e){x.append("th").attr("width",e.width?e.width:"10%").style("text-align",e.type=="numeric"?"right":"left").append("span").text(e.label)})}var T=E.selectAll("tbody").data(function(e){return e});T.enter().append("tbody"),t=d3.max(s,function(e){return e.depth}),i.size([r,t*f]);var N=T.selectAll("tr").data(function(e){return e.filter(function(e){return u&&!e.children?u(e):!0})},function(e,t){return e.id||e.id||++m});N.exit().remove(),N.select("img.nv-treeicon").attr("src",L).classed("folded",A);var C=N.enter().append("tr");l.forEach(function(e,t){var n=C.append("td").style("padding-left",function(e){return(t?0:e.depth*f+12+(L(e)?0:16))+"px"},"important").style("text-align",e.type=="numeric"?"right":"left");t==0&&n.append("img").classed("nv-treeicon",!0).classed("nv-folded",A).attr("src",L).style("width","14px").style("height","14px").style("padding","0 1px").style("display",function(e){return L(e)?"inline-block":"none"}).on("click",k),n.each(function(n){!t&&v(n)?d3.select(this).append("a").attr("href",v).attr("class",d3.functor(e.classes)).append("span"):d3.select(this).append("span"),d3.select(this).select("span").attr("class",d3.functor(e.classes)).text(function(t){return e.format?t[e.key]?e.format(t[e.key]):"-":t[e.key]||"-"})}),e.showCount&&(n.append("span").attr("class","nv-childrenCount"),N.selectAll("span.nv-childrenCount").text(function(e){return e.values&&e.values.length||e._values&&e._values.length?"("+(e.values&&e.values.filter(function(e){return u?u(e):!0}).length||e._values&&e._values.filter(function(e){return u?u(e):!0}).length||0)+")":""}))}),N.order().on("click",function(e){d.elementClick({row:this,data:e,pos:[e.x,e.y]})}).on("dblclick",function(e){d.elementDblclick({row:this,data:e,pos:[e.x,e.y]})}).on("mouseover",function(e){d.elementMouseover({row:this,data:e,pos:[e.x,e.y]})}).on("mouseout",function(e){d.elementMouseout({row:this,data:e,pos:[e.x,e.y]})})}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e4),o=!0,u=!1,a="No Data Available.",f=20,l=[{key:"key",label:"Name",type:"text"}],c=null,h="images/grey-plus.png",p="images/grey-minus.png",d=d3.dispatch("elementClick","elementDblclick","elementMouseover","elementMouseout"),v=function(e){return e.url},m=0;return g.options=e.utils.optionsFunc.bind(g),g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),scatter.color(i),g):i},g.id=function(e){return arguments.length?(s=e,g):s},g.header=function(e){return arguments.length?(o=e,g):o},g.noData=function(e){return arguments.length?(a=e,g):a},g.filterZero=function(e){return arguments.length?(u=e,g):u},g.columns=function(e){return arguments.length?(l=e,g):l},g.tableClass=function(e){return arguments.length?(c=e,g):c},g.iconOpen=function(e){return arguments.length?(h=e,g):h},g.iconClose=function(e){return arguments.length?(p=e,g):p},g.getUrl=function(e){return arguments.length?(v=e,g):v},g},e.models.legend=function(){function c(h){return h.each(function(c){var h=n-t.left-t.right,p=d3.select(this),d=p.selectAll("g.nv-legend").data([c]),v=d.enter().append("g").attr("class","nvd3 nv-legend").append("g"),m=d.select("g");d.attr("transform","translate("+t.left+","+t.top+")");var g=m.selectAll(".nv-series").data(function(e){return e}),y=g.enter().append("g").attr("class","nv-series").on("mouseover",function(e,t){l.legendMouseover(e,t)}).on("mouseout",function(e,t){l.legendMouseout(e,t)}).on("click",function(e,t){l.legendClick(e,t),a&&(f?(c.forEach(function(e){e.disabled=!0}),e.disabled=!1):(e.disabled=!e.disabled,c.every(function(e){return e.disabled})&&c.forEach(function(e){e.disabled=!1})),l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))}).on("dblclick",function(e,t){l.legendDblclick(e,t),a&&(c.forEach(function(e){e.disabled=!0}),e.disabled=!1,l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))});y.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),y.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8"),g.classed("disabled",function(e){return e.disabled}),g.exit().remove(),g.select("circle").style("fill",function(e,t){return e.color||s(e,t)}).style("stroke",function(e,t){return e.color||s(e,t)}),g.select("text").text(i);if(o){var b=[];g.each(function(t,n){var r=d3.select(this).select("text"),i;try{i=r.getComputedTextLength();if(i<=0)throw Error()}catch(s){i=e.utils.calcApproxTextWidth(r)}b.push(i+28)});var w=0,E=0,S=[];while(E<h&&w<b.length)S[w]=b[w],E+=b[w++];w===0&&(w=1);while(E>h&&w>1){S=[],w--;for(var x=0;x<b.length;x++)b[x]>(S[x%w]||0)&&(S[x%w]=b[x]);E=S.reduce(function(e,t,n,r){return e+t})}var T=[];for(var N=0,C=0;N<w;N++)T[N]=C,C+=S[N];g.attr("transform",function(e,t){return"translate("+T[t%w]+","+(5+Math.floor(t/w)*20)+")"}),u?m.attr("transform","translate("+(n-t.right-E)+","+t.top+")"):m.attr("transform","translate(0,"+t.top+")"),r=t.top+t.bottom+Math.ceil(b.length/w)*20}else{var k=5,L=5,A=0,O;g.attr("transform",function(e,r){var i=d3.select(this).select("text").node().getComputedTextLength()+28;return O=L,n<t.left+t.right+O+i&&(L=O=5,k+=20),L+=i,L>A&&(A=L),"translate("+O+","+k+")"}),m.attr("transform","translate("+(n-t.right-A)+","+t.top+")"),r=t.top+t.bottom+k+15}}),c}var t={top:5,right:0,bottom:5,left:0},n=400,r=20,i=function(e){return e.key},s=e.utils.defaultColor(),o=!0,u=!0,a=!0,f=!1,l=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange");return c.dispatch=l,c.options=e.utils.optionsFunc.bind(c),c.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,c):t},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.key=function(e){return arguments.length?(i=e,c):i},c.color=function(t){return arguments.length?(s=e.utils.getColor(t),c):s},c.align=function(e){return arguments.length?(o=e,c):o},c.rightAlign=function(e){return arguments.length?(u=e,c):u},c.updateState=function(e){return arguments.length?(a=e,c):a},c.radioButtonMode=function(e){return arguments.length?(f=e,c):f},c},e.models.line=function(){function m(g){return g.each(function(m){var g=r-n.left-n.right,b=i-n.top-n.bottom,w=d3.select(this);c=t.xScale(),h=t.yScale(),d=d||c,v=v||h;var E=w.selectAll("g.nv-wrap.nv-line").data([m]),S=E.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),T=S.append("defs"),N=S.append("g"),C=E.select("g");N.append("g").attr("class","nv-groups"),N.append("g").attr("class","nv-scatterWrap"),E.attr("transform","translate("+n.left+","+n.top+")"),t.width(g).height(b);var k=E.select(".nv-scatterWrap");k.call(t),T.append("clipPath").attr("id","nv-edge-clip-"+t.id()).append("rect"),E.select("#nv-edge-clip-"+t.id()+" rect").attr("width",g).attr("height",b>0?b:0),C.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":""),k.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":"");var L=E.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});L.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),L.exit().remove(),L.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return s(e,t)}).style("stroke",function(e,t){return s(e,t)}),L.style("stroke-opacity",1).style("fill-opacity",.5);var A=L.selectAll("path.nv-area").data(function(e){return f(e)?[e]:[]});A.enter().append("path").attr("class","nv-area").attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))}).y1(function(e,t){return v(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])}),L.exit().selectAll("path.nv-area").remove(),A.attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))}).y1(function(e,t){return h(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])});var O=L.selectAll("path.nv-line").data(function(e){return[e.values]});O.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))})),O.attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))})),d=c.copy(),v=h.copy()}),m}var t=e.models.scatter(),n={top:0,right:0,bottom:0,left:0},r=960,i=500,s=e.utils.defaultColor(),o=function(e){return e.x},u=function(e){return e.y},a=function(e,t){return!isNaN(u(e,t))&&u(e,t)!==null},f=function(e){return e.area},l=!1,c,h,p="linear";t.size(16).sizeDomain([16,256]);var d,v;return m.dispatch=t.dispatch,m.scatter=t,d3.rebind(m,t,"id","interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","padData","highlightPoint","clearHighlights"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.height=function(e){return arguments.length?(i=e,m):i},m.x=function(e){return arguments.length?(o=e,t.x(e),m):o},m.y=function(e){return arguments.length?(u=e,t.y(e),m):u},m.clipEdge=function(e){return arguments.length?(l=e,m):l},m.color=function(n){return arguments.length?(s=e.utils.getColor(n),t.color(s),m):s},m.interpolate=function(e){return arguments.length?(p=e,m):p},m.defined=function(e){return arguments.length?(a=e,m):a},m.isArea=function(e){return arguments.length?(f=d3.functor(e),m):f},m},e.models.lineChart=function(){function N(m){return m.each(function(m){var x=d3.select(this),C=this,k=(a||parseInt(x.style("width"))||960)-o.left-o.right,L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom;N.update=function(){x.call(N)},N.container=this,b.disabled=m.map(function(e){return!!e.disabled});if(!w){var A;w={};for(A in b)b[A]instanceof Array?w[A]=b[A].slice(0):w[A]=b[A]}if(!m||!m.length||!m.filter(function(e){return e.values.length}).length){var O=x.selectAll(".nv-noData").data([E]);return O.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),O.attr("x",o.left+k/2).attr("y",o.top+L/2).text(function(e){return e}),N}x.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var M=x.selectAll("g.nv-wrap.nv-lineChart").data([m]),_=M.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),D=M.select("g");_.append("rect").style("opacity",0),_.append("g").attr("class","nv-x nv-axis"),_.append("g").attr("class","nv-y nv-axis"),_.append("g").attr("class","nv-linesWrap"),_.append("g").attr("class","nv-legendWrap"),_.append("g").attr("class","nv-interactive"),D.select("rect").attr("width",k).attr("height",L>0?L:0),l&&(i.width(k),D.select(".nv-legendWrap").datum(m).call(i),o.top!=i.height()&&(o.top=i.height(),L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom),M.select(".nv-legendWrap").attr("transform","translate(0,"+ -o.top+")")),M.attr("transform","translate("+o.left+","+o.top+")"),p&&D.select(".nv-y.nv-axis").attr("transform","translate("+k+",0)"),d&&(s.width(k).height(L).margin({left:o.left,top:o.top}).svgContainer(x).xScale(g),M.select(".nv-interactive").call(s)),t.width(k).height(L).color(m.map(function(e,t){return e.color||u(e,t)}).filter(function(e,t){return!m[t].disabled}));var P=D.select(".nv-linesWrap").datum(m.filter(function(e){return!e.disabled}));P.call(t),c&&(n.scale(g).ticks(k/100).tickSize(-L,0),D.select(".nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),D.select(".nv-x.nv-axis").call(n)),h&&(r.scale(y).ticks(L/36).tickSize(-k,0),D.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),N.update()}),s.dispatch.on("elementMousemove",function(i){t.clearHighlights();var a,f,l,c=[];m.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,N.x()),t.highlightPoint(r,f,!0);var s=n.values[f];if(typeof s=="undefined")return;typeof a=="undefined"&&(a=s),typeof l=="undefined"&&(l=N.xScale()(N.x()(s,f))),c.push({key:n.key,value:N.y()(s,f),color:u(n,n.seriesIndex)})});if(c.length>2){var h=N.yScale().invert(i.mouseY),p=Math.abs(N.yScale().domain()[0]-N.yScale().domain()[1]),d=.03*p,g=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);g!==null&&(c[g].highlight=!0)}var y=n.tickFormat()(N.x()(a,f));s.tooltip.position({left:l+o.left,top:i.mouseY+o.top}).chartContainer(C.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:y,series:c})(),s.renderGuideLine(l)}),s.dispatch.on("elementMouseout",function(e){S.tooltipHide(),t.clearHighlights()}),S.on("tooltipShow",function(e){v&&T(e,C.parentNode)}),S.on("changeState",function(e){typeof e.disabled!="undefined"&&m.length===e.disabled.length&&(m.forEach(function(t,n){t.disabled=e.disabled[n]}),b.disabled=e.disabled),N.update()})}),N}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.interactiveGuideline(),o={top:30,right:20,bottom:50,left:60},u=e.utils.defaultColor(),a=null,f=null,l=!0,c=!0,h=!0,p=!1,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=0;n.orient("bottom").tickPadding(7),r.orient(p?"right":"left");var T=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,N);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),N.dispatch=S,N.lines=t,N.legend=i,N.xAxis=n,N.yAxis=r,N.interactiveLayer=s,d3.rebind(N,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id","interpolate"),N.options=e.utils.optionsFunc.bind(N),N.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,N):o},N.width=function(e){return arguments.length?(a=e,N):a},N.height=function(e){return arguments.length?(f=e,N):f},N.color=function(t){return arguments.length?(u=e.utils.getColor(t),i.color(u),N):u},N.showLegend=function(e){return arguments.length?(l=e,N):l},N.showXAxis=function(e){return arguments.length?(c=e,N):c},N.showYAxis=function(e){return arguments.length?(h=e,N):h},N.rightAlignYAxis=function(e){return arguments.length?(p=e,r.orient(e?"right":"left"),N):p},N.useInteractiveGuideline=function(e){return arguments.length?(d=e,e===!0&&(N.interactive(!1),N.useVoronoi(!1)),N):d},N.tooltips=function(e){return arguments.length?(v=e,N):v},N.tooltipContent=function(e){return arguments.length?(m=e,N):m},N.state=function(e){return arguments.length?(b=e,N):b},N.defaultState=function(e){return arguments.length?(w=e,N):w},N.noData=function(e){return arguments.length?(E=e,N):E},N.transitionDuration=function(e){return arguments.length?(x=e,N):x},N},e.models.linePlusBarChart=function(){function T(e){return e.each(function(e){var l=d3.select(this),c=this,v=(a||parseInt(l.style("width"))||960)-u.left-u.right,N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom;T.update=function(){l.call(T)},b.disabled=e.map(function(e){return!!e.disabled});if(!w){var C;w={};for(C in b)b[C]instanceof Array?w[C]=b[C].slice(0):w[C]=b[C]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var k=l.selectAll(".nv-noData").data([E]);return k.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),k.attr("x",u.left+v/2).attr("y",u.top+N/2).text(function(e){return e}),T}l.selectAll(".nv-noData").remove();var L=e.filter(function(e){return!e.disabled&&e.bar}),A=e.filter(function(e){return!e.bar});m=A.filter(function(e){return!e.disabled}).length&&A.filter(function(e){return!e.disabled})[0].values.length?t.xScale():n.xScale(),g=n.yScale(),y=t.yScale();var O=d3.select(this).selectAll("g.nv-wrap.nv-linePlusBar").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y1 nv-axis"),M.append("g").attr("class","nv-y2 nv-axis"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-linesWrap"),M.append("g").attr("class","nv-legendWrap"),p&&(o.width(v/2),_.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(o),u.top!=o.height()&&(u.top=o.height(),N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom),_.select(".nv-legendWrap").attr("transform","translate("+v/2+","+ -u.top+")")),O.attr("transform","translate("+u.left+","+u.top+")"),t.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar})),n.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar}));var D=_.select(".nv-barsWrap").datum(L.length?L:[{values:[]}]),P=_.select(".nv-linesWrap").datum(A[0]&&!A[0].disabled?A:[{values:[]}]);d3.transition(D).call(n),d3.transition(P).call(t),r.scale(m).ticks(v/100).tickSize(-N,0),_.select(".nv-x.nv-axis").attr("transform","translate(0,"+g.range()[0]+")"),d3.transition(_.select(".nv-x.nv-axis")).call(r),i.scale(g).ticks(N/36).tickSize(-v,0),d3.transition(_.select(".nv-y1.nv-axis")).style("opacity",L.length?1:0).call(i),s.scale(y).ticks(N/36).tickSize(L.length?0:-v,0),_.select(".nv-y2.nv-axis").style("opacity",A.length?1:0).attr("transform","translate("+v+",0)"),d3.transition(_.select(".nv-y2.nv-axis")).call(s),o.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),T.update()}),S.on("tooltipShow",function(e){d&&x(e,c.parentNode)}),S.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),b.disabled=t.disabled),T.update()})}),T}var t=e.models.line(),n=e.models.historicalBar(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.legend(),u={top:30,right:60,bottom:50,left:60},a=null,f=null,l=function(e){return e.x},c=function(e){return e.y},h=e.utils.defaultColor(),p=!0,d=!0,v=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},m,g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState");n.padData(!0),t.clipEdge(!1).padData(!0),r.orient("bottom").tickPadding(7).highlightZero(!1),i.orient("left"),s.orient("right");var x=function(n,o){var u=n.pos[0]+(o.offsetLeft||0),a=n.pos[1]+(o.offsetTop||0),f=r.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?i:s).tickFormat()(t.y()(n.point,n.pointIndex)),c=v(n.series.key,f,l,n,T);e.tooltip.show([u,a],c,n.value<0?"n":"s",null,o)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),n.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),n.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){d&&e.tooltip.cleanup()}),T.dispatch=S,T.legend=o,T.lines=t,T.bars=n,T.xAxis=r,T.y1Axis=i,T.y2Axis=s,d3.rebind(T,t,"defined","size","clipVoronoi","interpolate"),T.options=e.utils.optionsFunc.bind(T),T.x=function(e){return arguments.length?(l=e,t.x(e),n.x(e),T):l},T.y=function(e){return arguments.length?(c=e,t.y(e),n.y(e),T):c},T.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,T):u},T.width=function(e){return arguments.length?(a=e,T):a},T.height=function(e){return arguments.length?(f=e,T):f},T.color=function(t){return arguments.length?(h=e.utils.getColor(t),o.color(h),T):h},T.showLegend=function(e){return arguments.length?(p=e,T):p},T.tooltips=function(e){return arguments.length?(d=e,T):d},T.tooltipContent=function(e){return arguments.length?(v=e,T):v},T.state=function(e){return arguments.length?(b=e,T):b},T.defaultState=function(e){return arguments.length?(w=e,T):w},T.noData=function(e){return arguments.length?(E=e,T):E},T},e.models.lineWithFocusChart=function(){function k(e){return e.each(function(e){function R(e){var t=+(e=="e"),n=t?1:-1,r=O/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function U(){a.empty()||a.extent(w),F.data([a.empty()?g.domain():w]).each(function(e,t){var n=g(e[0])-v.range()[0],r=v.range()[1]-g(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",g(e[1])).attr("width",r<0?0:r)})}function z(){w=a.empty()?null:a.extent();var n=a.empty()?g.domain():a.extent();if(Math.abs(n[0]-n[1])<=1)return;T.brush({extent:n,brush:a}),U();var s=P.select(".nv-focus .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}).map(function(e,r){return{key:e.key,values:e.values.filter(function(e,r){return t.x()(e,r)>=n[0]&&t.x()(e,r)<=n[1]})}}));s.call(t),P.select(".nv-focus .nv-x.nv-axis").call(r),P.select(".nv-focus .nv-y.nv-axis").call(i)}var S=d3.select(this),N=this,L=(h||parseInt(S.style("width"))||960)-f.left-f.right,A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d,O=d-l.top-l.bottom;k.update=function(){S.call(k)},k.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var M=S.selectAll(".nv-noData").data([x]);return M.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),M.attr("x",f.left+L/2).attr("y",f.top+A/2).text(function(e){return e}),k}S.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale(),g=n.xScale(),y=n.yScale();var _=S.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([e]),D=_.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),P=_.select("g");D.append("g").attr("class","nv-legendWrap");var H=D.append("g").attr("class","nv-focus");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-linesWrap");var B=D.append("g").attr("class","nv-context");B.append("g").attr("class","nv-x nv-axis"),B.append("g").attr("class","nv-y nv-axis"),B.append("g").attr("class","nv-linesWrap"),B.append("g").attr("class","nv-brushBackground"),B.append("g").attr("class","nv-x nv-brush"),b&&(u.width(L),P.select(".nv-legendWrap").datum(e).call(u),f.top!=u.height()&&(f.top=u.height(),A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d),P.select(".nv-legendWrap").attr("transform","translate(0,"+ -f.top+")")),_.attr("transform","translate("+f.left+","+f.top+")"),t.width(L).height(A).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),n.defined(t.defined()).width(L).height(O).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),P.select(".nv-context").attr("transform","translate(0,"+(A+f.bottom+l.top)+")");var j=P.select(".nv-context .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}));d3.transition(j).call(n),r.scale(v).ticks(L/100).tickSize(-A,0),i.scale(m).ticks(A/36).tickSize(-L,0),P.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+A+")"),a.x(g).on("brush",function(){var e=k.transitionDuration();k.transitionDuration(0),z(),k.transitionDuration(e)}),w&&a.extent(w);var F=P.select(".nv-brushBackground").selectAll("g").data([w||a.extent()]),I=F.enter().append("g");I.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",O),I.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",O);var q=P.select(".nv-x.nv-brush").call(a);q.selectAll("rect").attr("height",O),q.selectAll(".resize").append("path").attr("d",R),z(),s.scale(g).ticks(L/100).tickSize(-O,0),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),d3.transition(P.select(".nv-context .nv-x.nv-axis")).call(s),o.scale(y).ticks(O/36).tickSize(-L,0),d3.transition(P.select(".nv-context .nv-y.nv-axis")).call(o),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),u.dispatch.on("stateChange",function(e){k.update()}),T.on("tooltipShow",function(e){E&&C(e,N.parentNode)})}),k}var t=e.models.line(),n=e.models.line(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.axis(),u=e.models.legend(),a=d3.svg.brush(),f={top:30,right:30,bottom:30,left:60},l={top:0,right:30,bottom:20,left:60},c=e.utils.defaultColor(),h=null,p=null,d=100,v,m,g,y,b=!0,w=null,E=!0,S=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},x="No Data Available.",T=d3.dispatch("tooltipShow","tooltipHide","brush"),N=0;t.clipEdge(!0),n.interactive(!1),r.orient("bottom").tickPadding(5),i.orient("left"),s.orient("bottom").tickPadding(5),o.orient("left");var C=function(n,s){var o=n.pos[0]+(s.offsetLeft||0),u=n.pos[1]+(s.offsetTop||0),a=r.tickFormat()(t.x()(n.point,n.pointIndex)),f=i.tickFormat()(t.y()(n.point,n.pointIndex)),l=S(n.series.key,a,f,n,k);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+f.left,e.pos[1]+f.top],T.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){E&&e.tooltip.cleanup()}),k.dispatch=T,k.legend=u,k.lines=t,k.lines2=n,k.xAxis=r,k.yAxis=i,k.x2Axis=s,k.y2Axis=o,d3.rebind(k,t,"defined","isArea","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id"),k.options=e.utils.optionsFunc.bind(k),k.x=function(e){return arguments.length?(t.x(e),n.x(e),k):t.x},k.y=function(e){return arguments.length?(t.y(e),n.y(e),k):t.y},k.margin=function(e){return arguments.length?(f.top=typeof e.top!="undefined"?e.top:f.top,f.right=typeof e.right!="undefined"?e.right:f.right,f.bottom=typeof e.bottom!="undefined"?e.bottom:f.bottom,f.left=typeof e.left!="undefined"?e.left:f.left,k):f},k.margin2=function(e){return arguments.length?(l=e,k):l},k.width=function(e){return arguments.length?(h=e,k):h},k.height=function(e){return arguments.length?(p=e,k):p},k.height2=function(e){return arguments.length?(d=e,k):d},k.color=function(t){return arguments.length?(c=e.utils.getColor(t),u.color(c),k):c},k.showLegend=function(e){return arguments.length?(b=e,k):b},k.tooltips=function(e){return arguments.length?(E=e,k):E},k.tooltipContent=function(e){return arguments.length?(S=e,k):S},k.interpolate=function(e){return arguments.length?(t.interpolate(e),n.interpolate(e),k):t.interpolate()},k.noData=function(e){return arguments.length?(x=e,k):x},k.xTickFormat=function(e){return arguments.length?(r.tickFormat(e),s.tickFormat(e),k):r.tickFormat()},k.yTickFormat=function(e){return arguments.length?(i.tickFormat(e),o.tickFormat(e),k):i.tickFormat()},k.brushExtent=function(e){return arguments.length?(w=e,k):w},k.transitionDuration=function(e){return arguments.length?(N=e,k):N},k},e.models.linePlusBarWithFocusChart=function(){function B(e){return e.each(function(e){function tt(e){var t=+(e=="e"),n=t?1:-1,r=I/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function nt(){h.empty()||h.extent(x),Y.data([h.empty()?k.domain():x]).each(function(e,t){var n=k(e[0])-k.range()[0],r=k.range()[1]-k(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",k(e[1])).attr("width",r<0?0:r)})}function rt(){x=h.empty()?null:h.extent(),S=h.empty()?k.domain():h.extent(),D.brush({extent:S,brush:h}),nt(),r.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),t.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var n=$.select(".nv-focus .nv-barsWrap").datum(R.length?R.map(function(e,t){return{key:e.key,values:e.values.filter(function(e,t){return r.x()(e,t)>=S[0]&&r.x()(e,t)<=S[1]})}}):[{values:[]}]),i=$.select(".nv-focus .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U.map(function(e,n){return{key:e.key,values:e.values.filter(function(e,n){return t.x()(e,n)>=S[0]&&t.x()(e,n)<=S[1]})}}));R.length?C=r.xScale():C=t.xScale(),s.scale(C).ticks(j/100).tickSize(-F,0),s.domain([Math.ceil(S[0]),Math.floor(S[1])]),$.select(".nv-x.nv-axis").call(s),n.call(r),i.call(t),$.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L.range()[0]+")"),u.scale(L).ticks(F/36).tickSize(-j,0),$.select(".nv-focus .nv-y1.nv-axis").style("opacity",R.length?1:0),a.scale(A).ticks(F/36).tickSize(R.length?0:-j,0),$.select(".nv-focus .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+C.range()[1]+",0)"),$.select(".nv-focus .nv-y1.nv-axis").call(u),$.select(".nv-focus .nv-y2.nv-axis").call(a)}var N=d3.select(this),P=this,j=(v||parseInt(N.style("width"))||960)-p.left-p.right,F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g,I=g-d.top-d.bottom;B.update=function(){N.call(B)},B.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=N.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",p.left+j/2).attr("y",p.top+F/2).text(function(e){return e}),B}N.selectAll(".nv-noData").remove();var R=e.filter(function(e){return!e.disabled&&e.bar}),U=e.filter(function(e){return!e.bar});C=r.xScale(),k=o.scale(),L=r.yScale(),A=t.yScale(),O=i.yScale(),M=n.yScale();var z=e.filter(function(e){return!e.disabled&&e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})}),W=e.filter(function(e){return!e.disabled&&!e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})});C.range([0,j]),k.domain(d3.extent(d3.merge(z.concat(W)),function(e){return e.x})).range([0,j]);var X=N.selectAll("g.nv-wrap.nv-linePlusBar").data([e]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),$=X.select("g");V.append("g").attr("class","nv-legendWrap");var J=V.append("g").attr("class","nv-focus");J.append("g").attr("class","nv-x nv-axis"),J.append("g").attr("class","nv-y1 nv-axis"),J.append("g").attr("class","nv-y2 nv-axis"),J.append("g").attr("class","nv-barsWrap"),J.append("g").attr("class","nv-linesWrap");var K=V.append("g").attr("class","nv-context");K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y1 nv-axis"),K.append("g").attr("class","nv-y2 nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-linesWrap"),K.append("g").attr("class","nv-brushBackground"),K.append("g").attr("class","nv-x nv-brush"),E&&(c.width(j/2),$.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(c),p.top!=c.height()&&(p.top=c.height(),F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g),$.select(".nv-legendWrap").attr("transform","translate("+j/2+","+ -p.top+")")),X.attr("transform","translate("+p.left+","+p.top+")"),i.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),n.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var Q=$.select(".nv-context .nv-barsWrap").datum(R.length?R:[{values:[]}]),G=$.select(".nv-context .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U);$.select(".nv-context").attr("transform","translate(0,"+(F+p.bottom+d.top)+")"),Q.call(i),G.call(n),h.x(k).on("brush",rt),x&&h.extent(x);var Y=$.select(".nv-brushBackground").selectAll("g").data([x||h.extent()]),Z=Y.enter().append("g");Z.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",I),Z.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",I);var et=$.select(".nv-x.nv-brush").call(h);et.selectAll("rect").attr("height",I),et.selectAll(".resize").append("path").attr("d",tt),o.ticks(j/100).tickSize(-I,0),$.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+O.range()[0]+")"),$.select(".nv-context .nv-x.nv-axis").call(o),f.scale(O).ticks(I/36).tickSize(-j,0),$.select(".nv-context .nv-y1.nv-axis").style("opacity",R.length?1:0).attr("transform","translate(0,"+k.range()[0]+")"),$.select(".nv-context .nv-y1.nv-axis").call(f),l.scale(M).ticks(I/36).tickSize(R.length?0:-j,0),$.select(".nv-context .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+k.range()[1]+",0)"),$.select(".nv-context .nv-y2.nv-axis").call(l),c.dispatch.on("stateChange",function(e){B.update()}),D.on("tooltipShow",function(e){T&&H(e,P.parentNode)}),rt()}),B}var t=e.models.line(),n=e.models.line(),r=e.models.historicalBar(),i=e.models.historicalBar(),s=e.models.axis(),o=e.models.axis(),u=e.models.axis(),a=e.models.axis(),f=e.models.axis(),l=e.models.axis(),c=e.models.legend(),h=d3.svg.brush(),p={top:30,right:30,bottom:30,left:60},d={top:0,right:30,bottom:20,left:60},v=null,m=null,g=100,y=function(e){return e.x},b=function(e){return e.y},w=e.utils.defaultColor(),E=!0,S,x=null,T=!0,N=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},C,k,L,A,O,M,_="No Data Available.",D=d3.dispatch("tooltipShow","tooltipHide","brush"),P=0;t.clipEdge(!0),n.interactive(!1),s.orient("bottom").tickPadding(5),u.orient("left"),a.orient("right"),o.orient("bottom").tickPadding(5),f.orient("left"),l.orient("right");var H=function(n,r){S&&(n.pointIndex+=Math.ceil(S[0]));var i=n.pos[0]+(r.offsetLeft||0),o=n.pos[1]+(r.offsetTop||0),f=s.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?u:a).tickFormat()(t.y()(n.point,n.pointIndex)),c=N(n.series.key,f,l,n,B);e.tooltip.show([i,o],c,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),r.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),r.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),D.on("tooltipHide",function(){T&&e.tooltip.cleanup()}),B.dispatch=D,B.legend=c,B.lines=t,B.lines2=n,B.bars=r,B.bars2=i,B.xAxis=s,B.x2Axis=o,B.y1Axis=u,B.y2Axis=a,B.y3Axis=f,B.y4Axis=l,d3.rebind(B,t,"defined","size","clipVoronoi","interpolate"),B.options=e.utils.optionsFunc.bind(B),B.x=function(e){return arguments.length?(y=e,t.x(e),r.x(e),B):y},B.y=function(e){return arguments.length?(b=e,t.y(e),r.y(e),B):b},B.margin=function(e){return arguments.length?(p.top=typeof e.top!="undefined"?e.top:p.top,p.right=typeof e.right!="undefined"?e.right:p.right,p.bottom=typeof e.bottom!="undefined"?e.bottom:p.bottom,p.left=typeof e.left!="undefined"?e.left:p.left,B):p},B.width=function(e){return arguments.length?(v=e,B):v},B.height=function(e){return arguments.length?(m=e,B):m},B.color=function(t){return arguments.length?(w=e.utils.getColor(t),c.color(w),B):w},B.showLegend=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(T=e,B):T},B.tooltipContent=function(e){return arguments.length?(N=e,B):N},B.noData=function(e){return arguments.length?(_=e,B):_},B.brushExtent=function(e){return arguments.length?(x=e,B):x},B},e.models.multiBar=function(){function C(e){return e.each(function(e){var g=n-t.left-t.right,C=r-t.top-t.bottom,k=d3.select(this);d&&e.length&&(d=[{values:e[0].values.map(function(e){return{x:e.x,y:0,series:e.series,size:.01}})}]),c&&(e=d3.layout.stack().offset(h).values(function(e){return e.values}).y(a)(!e.length&&d?d:e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),c&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i,i-=t.size):(t.y1=t.size+r,r+=t.size)})});var L=y&&b?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});i.domain(y||d3.merge(L).map(function(e){return e.x})).rangeBands(w||[0,g],S),s.domain(b||d3.extent(d3.merge(L).map(function(e){return c?e.y>0?e.y1:e.y1+e.y:e.y}).concat(f))).range(E||[C,0]),i.domain()[0]===i.domain()[1]&&(i.domain()[0]?i.domain([i.domain()[0]-i.domain()[0]*.01,i.domain()[1]+i.domain()[1]*.01]):i.domain([-1,1])),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]+s.domain()[0]*.01,s.domain()[1]-s.domain()[1]*.01]):s.domain([-1,1])),T=T||i,N=N||s;var A=k.selectAll("g.nv-wrap.nv-multibar").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),M=O.append("defs"),_=O.append("g"),D=A.select("g");_.append("g").attr("class","nv-groups"),A.attr("transform","translate("+t.left+","+t.top+")"),M.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),A.select("#nv-edge-clip-"+o+" rect").attr("width",g).attr("height",C),D.attr("clip-path",l?"url(#nv-edge-clip-"+o+")":"");var P=A.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});P.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),P.exit().selectAll("rect.nv-bar").attr("y",function(e){return c?N(e.y0):N(0)}).attr("height",0).remove(),P.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return p(e,t)}).style("stroke",function(e,t){return p(e,t)}),P.style("stroke-opacity",1).style("fill-opacity",.75);var H=P.selectAll("rect.nv-bar").data(function(t){return d&&!e.length?d.values:t.values});H.exit().remove();var B=H.enter().append("rect").attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("x",function(t,n,r){return c?0:r*i.rangeBand()/e.length}).attr("y",function(e){return N(c?e.y0:0)}).attr("height",0).attr("width",i.rangeBand()/(c?1:e.length)).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"});H.style("fill",function(e,t,n){return p(e,n,t)}).style("stroke",function(e,t,n){return p(e,n,t)}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"}),v&&(m||(m=e.map(function(){return!0})),H.style("fill",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()})),c?H.attr("y",function(e,t){return s(c?e.y1:0)}).attr("height",function(e,t){return Math.max(Math.abs(s(e.y+(c?e.y0:0))-s(c?e.y0:0)),1)}).attr("x",function(t,n){return c?0:t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/(c?1:e.length)):H.attr("x",function(t,n){return t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/e.length).attr("y",function(e,t){return a(e,t)<0?s(0):s(0)-s(a(e,t))<1?s(0)-1:s(a(e,t))||0}).attr("height",function(e,t){return Math.max(Math.abs(s(a(e,t))-s(0)),1)||0}),T=i.copy(),N=s.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=d3.scale.ordinal(),s=d3.scale.linear(),o=Math.floor(Math.random()*1e4),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=!0,c=!1,h="zero",p=e.utils.defaultColor(),d=!1,v=null,m,g=1200,y,b,w,E,S=.1,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(i=e,C):i},C.yScale=function(e){return arguments.length?(s=e,C):s},C.xDomain=function(e){return arguments.length?(y=e,C):y},C.yDomain=function(e){return arguments.length?(b=e,C):b},C.xRange=function(e){return arguments.length?(w=e,C):w},C.yRange=function(e){return arguments.length?(E=e,C):E},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(c=e,C):c},C.stackOffset=function(e){return arguments.length?(h=e,C):h},C.clipEdge=function(e){return arguments.length?(l=e,C):l},C.color=function(t){return arguments.length?(p=e.utils.getColor(t),C):p},C.barColor=function(t){return arguments.length?(v=e.utils.getColor(t),C):v},C.disabled=function(e){return arguments.length?(m=e,C):m},C.id=function(e){return arguments.length?(o=e,C):o},C.hideable=function(e){return arguments.length?(d=e,C):d},C.delay=function(e){return arguments.length?(g=e,C):g},C.groupSpacing=function(e){return arguments.length?(S=e,C):S},C},e.models.multiBarChart=function(){function A(e){return e.each(function(e){var b=d3.select(this),k=this,O=(u||parseInt(b.style("width"))||960)-o.left-o.right,M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom;A.update=function(){b.call(A)},A.container=this,S.disabled=e.map(function(e){return!!e.disabled});if(!x){var _;x={};for(_ in S)S[_]instanceof Array?x[_]=S[_].slice(0):x[_]=S[_]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var D=b.selectAll(".nv-noData").data([T]);return D.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),D.attr("x",o.left+O/2).attr("y",o.top+M/2).text(function(e){return e}),A}b.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();var P=b.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([e]),H=P.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),B=P.select("g");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-barsWrap"),H.append("g").attr("class","nv-legendWrap"),H.append("g").attr("class","nv-controlsWrap"),c&&(i.width(O-C()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),B.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom),B.select(".nv-legendWrap").attr("transform","translate("+C()+","+ -o.top+")"));if(l){var j=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(C()).color(["#444","#444","#444"]),B.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -o.top+")").call(s)}P.attr("transform","translate("+o.left+","+o.top+")"),d&&B.select(".nv-y.nv-axis").attr("transform","translate("+O+",0)"),t.disabled(e.map(function(e){return e.disabled})).width(O).height(M).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var F=B.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));F.call(t);if(h){n.scale(w).ticks(O/100).tickSize(-M,0),B.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),B.select(".nv-x.nv-axis").call(n);var I=B.select(".nv-x.nv-axis > g").selectAll("g");I.selectAll("line, text").style("opacity",1);if(m){var q=function(e,t){return"translate("+e+","+t+")"},R=5,U=17;I.selectAll("text").attr("transform",function(e,t,n){return q(0,n%2==0?R:U)});var z=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;B.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(e,t){return q(0,t===0||z%2!==0?U:R)})}v&&I.filter(function(t,n){return n%Math.ceil(e[0].values.length/(O/100))!==0}).selectAll("text, line").style("opacity",0),g&&I.selectAll(".tick text").attr("transform","rotate("+g+" 0,0)").style("text-anchor",g>0?"start":"end"),B.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}p&&(r.scale(E).ticks(M/36).tickSize(-O,0),B.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){S=e,N.stateChange(S),A.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;j=j.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}S.stacked=t.stacked(),N.stateChange(S),A.update()}),N.on("tooltipShow",function(e){y&&L(e,k.parentNode)}),N.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),S.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),S.stacked=n.stacked),A.update()})}),A}var t=e.models.multiBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=!1,g=0,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},w,E,S={stacked:!1},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=function(){return l?180:0},k=0;t.stacked(!1),n.orient("bottom").tickPadding(7).highlightZero(!0).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(d?"right":"left").tickFormat(d3.format(",.1f")),s.updateState(!1);var L=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,A);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],N.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){y&&e.tooltip.cleanup()}),A.dispatch=N,A.multibar=t,A.legend=i,A.xAxis=n,A.yAxis=r,d3.rebind(A,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","stacked","stackOffset","delay","barColor","groupSpacing"),A.options=e.utils.optionsFunc.bind(A),A.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,A):o},A.width=function(e){return arguments.length?(u=e,A):u},A.height=function(e){return arguments.length?(a=e,A):a},A.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),A):f},A.showControls=function(e){return arguments.length?(l=e,A):l},A.showLegend=function(e){return arguments.length?(c=e,A):c},A.showXAxis=function(e){return arguments.length?(h=e,A):h},A.showYAxis=function(e){return arguments.length?(p=e,A):p},A.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),A):d},A.reduceXTicks=function(e){return arguments.length?(v=e,A):v},A.rotateLabels=function(e){return arguments.length?(g=e,A):g},A.staggerLabels=function(e){return arguments.length?(m=e,A):m},A.tooltip=function(e){return arguments.length?(b=e,A):b},A.tooltips=function(e){return arguments.length?(y=e,A):y},A.tooltipContent=function(e){return arguments.length?(b=e,A):b},A.state=function(e){return arguments.length?(S=e,A):S},A.defaultState=function(e){return arguments.length?(x=e,A):x},A.noData=function(e){return arguments.length?(T=e,A):T},A.transitionDuration=function(e){return arguments.length?(k=e,A):k},A},e.models.multiBarHorizontal=function(){function C(e){return e.each(function(e){var i=n-t.left-t.right,y=r-t.top-t.bottom,C=d3.select(this);p&&(e=d3.layout.stack().offset("zero").values(function(e){return e.values}).y(a)(e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),p&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i-t.size,i-=t.size):(t.y1=r,r+=t.size)})});var k=b&&w?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});s.domain(b||d3.merge(k).map(function(e){return e.x})).rangeBands(E||[0,y],.1),o.domain(w||d3.extent(d3.merge(k).map(function(e){return p?e.y>0?e.y1+e.y:e.y1:e.y}).concat(f))),d&&!p?o.range(S||[o.domain()[0]<0?m:0,i-(o.domain()[1]>0?m:0)]):o.range(S||[0,i]),T=T||s,N=N||d3.scale.linear().domain(o.domain()).range([o(0),o(0)]);var L=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([e]),A=L.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),O=A.append("defs"),M=A.append("g"),_=L.select("g");M.append("g").attr("class","nv-groups"),L.attr("transform","translate("+t.left+","+t.top+")");var D=L.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return l(e,t)}).style("stroke",function(e,t){return l(e,t)}),D.style("stroke-opacity",1).style("fill-opacity",.75);var P=D.selectAll("g.nv-bar").data(function(e){return e.values});P.exit().remove();var H=P.enter().append("g").attr("transform",function(t,n,r){return"translate("+N(p?t.y0:0)+","+(p?0:r*s.rangeBand()/e.length+s(u(t,n)))+")"});H.append("rect").attr("width",0).attr("height",s.rangeBand()/(p?1:e.length)),P.on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[o(a(t,n)+(p?t.y0:0)),s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.append("text"),d&&!p?(P.select("text").attr("text-anchor",function(e,t){return a(e,t)<0?"end":"start"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return g(a(e,t))}),P.select("text").attr("x",function(e,t){return a(e,t)<0?-4:o(a(e,t))-o(0)+4})):P.selectAll("text").text(""),v&&!p?(H.append("text").classed("nv-bar-label",!0),P.select("text.nv-bar-label").attr("text-anchor",function(e,t){return a(e,t)<0?"start":"end"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return u(e,t)}),P.select("text.nv-bar-label").attr("x",function(e,t){return a(e,t)<0?o(0)-o(a(e,t))+4:-4})):P.selectAll("text.nv-bar-label").text(""),P.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}),c&&(h||(h=e.map(function(){return!0})),P.style("fill",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()})),p?P.attr("transform",function(e,t){return"translate("+o(e.y1)+","+s(u(e,t))+")"}).select("rect").attr("width",function(e,t){return Math.abs(o(a(e,t)+e.y0)-o(e.y0))}).attr("height",s.rangeBand()):P.attr("transform",function(t,n){return"translate("+(a(t,n)<0?o(a(t,n)):o(0))+","+(t.series*s.rangeBand()/e.length+s(u(t,n)))+")"}).select("rect").attr("height",s.rangeBand()/e.length).attr("width",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(0)),1)}),T=s.copy(),N=o.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=null,h,p=!1,d=!1,v=!1,m=60,g=d3.format(",.2f"),y=1200,b,w,E,S,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(s=e,C):s},C.yScale=function(e){return arguments.length?(o=e,C):o},C.xDomain=function(e){return arguments.length?(b=e,C):b},C.yDomain=function(e){return arguments.length?(w=e,C):w},C.xRange=function(e){return arguments.length?(E=e,C):E},C.yRange=function(e){return arguments.length?(S=e,C):S},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(p=e,C):p},C.color=function(t){return arguments.length?(l=e.utils.getColor(t),C):l},C.barColor=function(t){return arguments.length?(c=e.utils.getColor(t),C):c},C.disabled=function(e){return arguments.length?(h=e,C):h},C.id=function(e){return arguments.length?(i=e,C):i},C.delay=function(e){return arguments.length?(y=e,C):y},C.showValues=function(e){return arguments.length?(d=e,C):d},C.showBarLabels=function(e){return arguments.length?(v=e,C):v},C.valueFormat=function(e){return arguments.length?(g=e,C):g},C.valuePadding=function(e){return arguments.length?(m=e,C):m},C},e.models.multiBarHorizontalChart=function(){function C(e){return e.each(function(e){var d=d3.select(this),m=this,T=(u||parseInt(d.style("width"))||960)-o.left-o.right,k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom;C.update=function(){d.call(C)},C.container=this,b.disabled=e.map(function(e){return!!e.disabled});if(!w){var L;w={};for(L in b)b[L]instanceof Array?w[L]=b[L].slice(0):w[L]=b[L]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var A=d.selectAll(".nv-noData").data([E]);return A.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),A.attr("x",o.left+T/2).attr("y",o.top+k/2).text(function(e){return e}),C}d.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var O=d.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-legendWrap"),M.append("g").attr("class","nv-controlsWrap"),c&&(i.width(T-x()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),_.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom),_.select(".nv-legendWrap").attr("transform","translate("+x()+","+ -o.top+")"));if(l){var D=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(x()).color(["#444","#444","#444"]),_.select(".nv-controlsWrap").datum(D).attr("transform","translate(0,"+ -o.top+")").call(s)}O.attr("transform","translate("+o.left+","+o.top+")"),t.disabled(e.map(function(e){return e.disabled})).width(T).height(k).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var P=_.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));P.call(t);if(h){n.scale(g).ticks(k/24).tickSize(-T,0),_.select(".nv-x.nv-axis").call(n);var H=_.select(".nv-x.nv-axis").selectAll("g");H.selectAll("line, text")}p&&(r.scale(y).ticks(T/100).tickSize(-k,0),_.select(".nv-y.nv-axis").attr("transform","translate(0,"+k+")"),_.select(".nv-y.nv-axis").call(r)),_.select(".nv-zeroLine line").attr("x1",y(0)).attr("x2",y(0)).attr("y1",0).attr("y2",-k),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),C.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;D=D.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}b.stacked=t.stacked(),S.stateChange(b),C.update()}),S.on("tooltipShow",function(e){v&&N(e,m.parentNode)}),S.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),b.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),b.stacked=n.stacked),C.update()})}),C}var t=e.models.multiBarHorizontal(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend().height(30),s=e.models.legend().height(30),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+" - "+t+"</h3>"+"<p>"+n+"</p>"},g,y,b={stacked:d},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=function(){return l?180:0},T=0;t.stacked(d),n.orient("left").tickPadding(5).highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient("bottom").tickFormat(d3.format(",.1f")),s.updateState(!1);var N=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,C);e.tooltip.show([o,u],l,i.value<0?"e":"w",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),C.dispatch=S,C.multibar=t,C.legend=i,C.xAxis=n,C.yAxis=r,d3.rebind(C,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","delay","showValues","showBarLabels","valueFormat","stacked","barColor"),C.options=e.utils.optionsFunc.bind(C),C.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,C):o},C.width=function(e){return arguments.length?(u=e,C):u},C.height=function(e){return arguments.length?(a=e,C):a},C.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),C):f},C.showControls=function(e){return arguments.length?(l=e,C):l},C.showLegend=function(e){return arguments.length?(c=e,C):c},C.showXAxis=function(e){return arguments.length?(h=e,C):h},C.showYAxis=function(e){return arguments.length?(p=e,C):p},C.tooltip=function(e){return arguments.length?(m=e,C):m},C.tooltips=function(e){return arguments.length?(v=e,C):v},C.tooltipContent=function(e){return arguments.length?(m=e,C):m},C.state=function(e){return arguments.length?(b=e,C):b},C.defaultState=function(e){return arguments.length?(w=e,C):w},C.noData=function(e){return arguments.length?(E=e,C):E},C.transitionDuration=function(e){return arguments.length?(T=e,C):T},C},e.models.multiChart=function(){function C(e){return e.each(function(e){var u=d3.select(this),f=this;C.update=function(){u.call(C)},C.container=this;var k=(r||parseInt(u.style("width"))||960)-t.left-t.right,L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom,A=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==1}),O=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==2}),M=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==1}),_=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==2}),D=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==1}),P=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==2}),H=e.filter(function(e){return!e.disabled&&e.yAxis==1}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})}),B=e.filter(function(e){return!e.disabled&&e.yAxis==2}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})});a.domain(d3.extent(d3.merge(H.concat(B)),function(e){return e.x})).range([0,k]);var j=u.selectAll("g.wrap.multiChart").data([e]),F=j.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");F.append("g").attr("class","x axis"),F.append("g").attr("class","y1 axis"),F.append("g").attr("class","y2 axis"),F.append("g").attr("class","lines1Wrap"),F.append("g").attr("class","lines2Wrap"),F.append("g").attr("class","bars1Wrap"),F.append("g").attr("class","bars2Wrap"),F.append("g").attr("class","stack1Wrap"),F.append("g").attr("class","stack2Wrap"),F.append("g").attr("class","legendWrap");var I=j.select("g");s&&(x.width(k/2),I.select(".legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.yAxis==1?"":" (right axis)"),e})).call(x),t.top!=x.height()&&(t.top=x.height(),L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom),I.select(".legendWrap").attr("transform","translate("+k/2+","+ -t.top+")")),d.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="line"})),v.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="line"})),m.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="bar"})),g.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="bar"})),y.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="area"})),b.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="area"})),I.attr("transform","translate("+t.left+","+t.top+")");var q=I.select(".lines1Wrap").datum(A),R=I.select(".bars1Wrap").datum(M),U=I.select(".stack1Wrap").datum(D),z=I.select(".lines2Wrap").datum(O),W=I.select(".bars2Wrap").datum(_),X=I.select(".stack2Wrap").datum(P),V=D.length?D.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[],$=P.length?P.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[];h.domain(l||d3.extent(d3.merge(H).concat(V),function(e){return e.y})).range([0,L]),p.domain(c||d3.extent(d3.merge(B).concat($),function(e){return e.y})).range([0,L]),d.yDomain(h.domain()),m.yDomain(h.domain()),y.yDomain(h.domain()),v.yDomain(p.domain()),g.yDomain(p.domain()),b.yDomain(p.domain()),D.length&&d3.transition(U).call(y),P.length&&d3.transition(X).call(b),M.length&&d3.transition(R).call(m),_.length&&d3.transition(W).call(g),A.length&&d3.transition(q).call(d),O.length&&d3.transition(z).call(v),w.ticks(k/100).tickSize(-L,0),I.select(".x.axis").attr("transform","translate(0,"+L+")"),d3.transition(I.select(".x.axis")).call(w),E.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y1.axis")).call(E),S.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y2.axis")).call(S),I.select(".y2.axis").style("opacity",B.length?1:0).attr("transform","translate("+a.range()[1]+",0)"),x.dispatch.on("stateChange",function(e){C.update()}),T.on("tooltipShow",function(e){o&&N(e,f.parentNode)})}),C}var t={top:30,right:20,bottom:50,left:60},n=d3.scale.category20().range(),r=null,i=null,s=!0,o=!0,u=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},a,f,l,c,a=d3.scale.linear(),h=d3.scale.linear(),p=d3.scale.linear(),d=e.models.line().yScale(h),v=e.models.line().yScale(p),m=e.models.multiBar().stacked(!1).yScale(h),g=e.models.multiBar().stacked(!1).yScale(p),y=e.models.stackedArea().yScale(h),b=e.models.stackedArea().yScale(p),w=e.models.axis().scale(a).orient("bottom").tickPadding(5),E=e.models.axis().scale(h).orient("left"),S=e.models.axis().scale(p).orient("right"),x=e.models.legend().height(30),T=d3.dispatch("tooltipShow","tooltipHide"),N=function(t,n){var r=t.pos[0]+(n.offsetLeft||0),i=t.pos[1]+(n.offsetTop||0),s=w.tickFormat()(d.x()(t.point,t.pointIndex)),o=(t.series.yAxis==2?S:E).tickFormat()(d.y()(t.point,t.pointIndex)),a=u(t.series.key,s,o,t,C);e.tooltip.show([r,i],a,undefined,undefined,n.offsetParent)};return d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),m.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),m.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),g.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),g.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),y.dispatch.on("tooltipShow",function(e){if(!Math.round(y.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),y.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),b.dispatch.on("tooltipShow",function(e){if(!Math.round(b.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),b.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){o&&e.tooltip.cleanup()}),C.dispatch=T,C.lines1=d,C.lines2=v,C.bars1=m,C.bars2=g,C.stack1=y,C.stack2=b,C.xAxis=w,C.yAxis1=E,C.yAxis2=S,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(getX=e,d.x(e),m.x(e),C):getX},C.y=function(e){return arguments.length?(getY=e,d.y(e),m.y(e),C):getY},C.yDomain1=function(e){return arguments.length?(l=e,C):l},C.yDomain2=function(e){return arguments.length?(c=e,C):c},C.margin=function(e){return arguments.length?(t=e,C):t},C.width=function(e){return arguments.length?(r=e,C):r},C.height=function(e){return arguments.length?(i=e,C):i},C.color=function(e){return arguments.length?(n=e,x.color(e),C):n},C.showLegend=function(e){return arguments.length?(s=e,C):s},C.tooltips=function(e){return arguments.length?(o=e,C):o},C.tooltipContent=function(e){return arguments.length?(u=e,C):u},C},e.models.ohlcBar=function(){function x(e){return e.each(function(e){var g=n-t.left-t.right,x=r-t.top-t.bottom,T=d3.select(this);s.domain(y||d3.extent(e[0].values.map(u).concat(p))),v?s.range(w||[g*.5/e[0].values.length,g*(e[0].values.length-.5)/e[0].values.length]):s.range(w||[0,g]),o.domain(b||[d3.min(e[0].values.map(h).concat(d)),d3.max(e[0].values.map(c).concat(d))]).range(E||[x,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([e[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-ticks"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){S.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",g).attr("height",x),A.attr("clip-path",m?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-ticks").selectAll(".nv-tick").data(function(e){return e});O.exit().remove();var M=O.enter().append("path").attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"}).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),S.elementMouseover({point:t,series:e[0],pos:[s(u(t,n)),o(a(t,n))],pointIndex:n,seriesIndex:0,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),S.elementMouseout({point:t,series:e[0],pointIndex:n,seriesIndex:0,e:d3.event})}).on("click",function(e,t){S.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){S.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}),d3.transition(O).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"})}),x}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=function(e){return e.open},l=function(e){return e.close},c=function(e){return e.high},h=function(e){return e.low},p=[],d=[],v=!1,m=!0,g=e.utils.defaultColor(),y,b,w,E,S=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return x.dispatch=S,x.options=e.utils.optionsFunc.bind(x),x.x=function(e){return arguments.length?(u=e,x):u},x.y=function(e){return arguments.length?(a=e,x):a},x.open=function(e){return arguments.length?(f=e,x):f},x.close=function(e){return arguments.length?(l=e,x):l},x.high=function(e){return arguments.length?(c=e,x):c},x.low=function(e){return arguments.length?(h=e,x):h},x.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,x):t},x.width=function(e){return arguments.length?(n=e,x):n},x.height=function(e){return arguments.length?(r=e,x):r},x.xScale=function(e){return arguments.length?(s=e,x):s},x.yScale=function(e){return arguments.length?(o=e,x):o},x.xDomain=function(e){return arguments.length?(y=e,x):y},x.yDomain=function(e){return arguments.length?(b=e,x):b},x.xRange=function(e){return arguments.length?(w=e,x):w},x.yRange=function(e){return arguments.length?(E=e,x):E},x.forceX=function(e){return arguments.length?(p=e,x):p},x.forceY=function(e){return arguments.length?(d=e,x):d},x.padData=function(e){return arguments.length?(v=e,x):v},x.clipEdge=function(e){return arguments.length?(m=e,x):m},x.color=function(t){return arguments.length?(g=e.utils.getColor(t),x):g},x.id=function(e){return arguments.length?(i=e,x):i},x},e.models.pie=function(){function S(e){return e.each(function(e){function q(e){var t=(e.startAngle+e.endAngle)*90/Math.PI-90;return t>90?t-180:t}function R(e){e.endAngle=isNaN(e.endAngle)?0:e.endAngle,e.startAngle=isNaN(e.startAngle)?0:e.startAngle,m||(e.innerRadius=0);var t=d3.interpolate(this._current,e);return this._current=t(0),function(e){return A(t(e))}}function U(e){e.innerRadius=0;var t=d3.interpolate({startAngle:0,endAngle:0},e);return function(e){return A(t(e))}}var o=n-t.left-t.right,f=r-t.top-t.bottom,S=Math.min(o,f)/2,x=S-S/5,T=d3.select(this),N=T.selectAll(".nv-wrap.nv-pie").data(e),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-pie nv-chart-"+u),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-pie"),k.append("g").attr("class","nv-pieLabels"),N.attr("transform","translate("+t.left+","+t.top+")"),L.select(".nv-pie").attr("transform","translate("+o/2+","+f/2+")"),L.select(".nv-pieLabels").attr("transform","translate("+o/2+","+f/2+")"),T.on("click",function(e,t){E.chartClick({data:e,index:t,pos:d3.event,id:u})});var A=d3.svg.arc().outerRadius(x);y&&A.startAngle(y),b&&A.endAngle(b),m&&A.innerRadius(S*w);var O=d3.layout.pie().sort(null).value(function(e){return e.disabled?0:s(e)}),M=N.select(".nv-pie").selectAll(".nv-slice").data(O),_=N.select(".nv-pieLabels").selectAll(".nv-label").data(O);M.exit().remove(),_.exit().remove();var D=M.enter().append("g").attr("class","nv-slice").on("mouseover",function(e,t){d3.select(this).classed("hover",!0),E.elementMouseover({label:i(e.data),value:s(e.data),point:e.data,pointIndex:t,pos:[d3.event.pageX,d3.event.pageY],id:u})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),E.elementMouseout({label:i(e.data),value:s(e.data),point:e.data,index:t,id:u})}).on("click",function(e,t){E.elementClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()}).on("dblclick",function(e,t){E.elementDblClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()});M.attr("fill",function(e,t){return a(e,t)}).attr("stroke",function(e,t){return a(e,t)});var P=D.append("path").each(function(e){this._current=e});M.select("path").attr("d",A);if(l){var H=d3.svg.arc().innerRadius(0);c&&(H=A),h&&(H=d3.svg.arc().outerRadius(A.outerRadius())),_.enter().append("g").classed("nv-label",!0).each(function(e,t){var n=d3.select(this);n.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}return e.outerRadius=S+10,e.innerRadius=S+15,"translate("+H.centroid(e)+")"}),n.append("rect").style("stroke","#fff").style("fill","#fff").attr("rx",3).attr("ry",3),n.append("text").style("text-anchor",g?(e.startAngle+e.endAngle)/2<Math.PI?"start":"end":"middle").style("fill","#000")});var B={},j=14,F=140,I=function(e){return Math.floor(e[0]/F)*F+","+Math.floor(e[1]/j)*j};_.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}e.outerRadius=S+10,e.innerRadius=S+15;var n=H.centroid(e),r=I(n);return B[r]&&(n[1]-=j),B[I(n)]=!0,"translate("+n+")"}),_.select(".nv-label text").style("text-anchor",g?(d.startAngle+d.endAngle)/2<Math.PI?"start":"end":"middle").text(function(e,t){var n=(e.endAngle-e.startAngle)/(2*Math.PI),r={key:i(e.data),value:s(e.data),percent:d3.format("%")(n)};return e.value&&n>v?r[p]:""})}}),S}var t={top:0,right:0,bottom:0,left:0},n=500,r=500,i=function(e){return e.x},s=function(e){return e.y},o=function(e){return e.description},u=Math.floor(Math.random()*1e4),a=e.utils.defaultColor(),f=d3.format(",.2f"),l=!0,c=!0,h=!1,p="key",v=.02,m=!1,g=!1,y=!1,b=!1,w=.5,E=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return S.dispatch=E,S.options=e.utils.optionsFunc.bind(S),S.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,S):t},S.width=function(e){return arguments.length?(n=e,S):n},S.height=function(e){return arguments.length?(r=e,S):r},S.values=function(t){return e.log("pie.values() is no longer supported."),S},S.x=function(e){return arguments.length?(i=e,S):i},S.y=function(e){return arguments.length?(s=d3.functor(e),S):s},S.description=function(e){return arguments.length?(o=e,S):o},S.showLabels=function(e){return arguments.length?(l=e,S):l},S.labelSunbeamLayout=function(e){return arguments.length?(g=e,S):g},S.donutLabelsOutside=function(e){return arguments.length?(h=e,S):h},S.pieLabelsOutside=function(e){return arguments.length?(c=e,S):c},S.labelType=function(e){return arguments.length?(p=e,p=p||"key",S):p},S.donut=function(e){return arguments.length?(m=e,S):m},S.donutRatio=function(e){return arguments.length?(w=e,S):w},S.startAngle=function(e){return arguments.length?(y=e,S):y},S.endAngle=function(e){return arguments.length?(b=e,S):b},S.id=function(e){return arguments.length?(u=e,S):u},S.color=function(t){return arguments.length?(a=e.utils.getColor(t),S):a},S.valueFormat=function(e){return arguments.length?(f=e,S):f},S.labelThreshold=function(e){return arguments.length?(v=e,S):v},S},e.models.pieChart=function(){function v(e){return e.each(function(e){var u=d3.select(this),a=this,f=(i||parseInt(u.style("width"))||960)-r.left-r.right,d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom;v.update=function(){u.call(v)},v.container=this,l.disabled=e.map(function(e){return!!e.disabled});if(!c){var m;c={};for(m in l)l[m]instanceof Array?c[m]=l[m].slice(0):c[m]=l[m]}if(!e||!e.length){var g=u.selectAll(".nv-noData").data([h]);return g.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),g.attr("x",r.left+f/2).attr("y",r.top+d/2).text(function(e){return e}),v}u.selectAll(".nv-noData").remove();var y=u.selectAll("g.nv-wrap.nv-pieChart").data([e]),b=y.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),w=y.select("g");b.append("g").attr("class","nv-pieWrap"),b.append("g").attr("class","nv-legendWrap"),o&&(n.width(f).key(t.x()),y.select(".nv-legendWrap").datum(e).call(n),r.top!=n.height()&&(r.top=n.height(),d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom),y.select(".nv-legendWrap").attr("transform","translate(0,"+ -r.top+")")),y.attr("transform","translate("+r.left+","+r.top+")"),t.width(f).height(d);var E=w.select(".nv-pieWrap").datum([e]);d3.transition(E).call(t),n.dispatch.on("stateChange",function(e){l=e,p.stateChange(l),v.update()}),t.dispatch.on("elementMouseout.tooltip",function(e){p.tooltipHide(e)}),p.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),l.disabled=t.disabled),v.update()})}),v}var t=e.models.pie(),n=e.models.legend(),r={top:30,right:20,bottom:20,left:20},i=null,s=null,o=!0,u=e.utils.defaultColor(),a=!0,f=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+t+"</p>"},l={},c=null,h="No Data Available.",p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),d=function(n,r){var i=t.description()(n.point)||t.x()(n.point),s=n.pos[0]+(r&&r.offsetLeft||0),o=n.pos[1]+(r&&r.offsetTop||0),u=t.valueFormat()(t.y()(n.point)),a=f(i,u,n,v);e.tooltip.show([s,o],a,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+r.left,e.pos[1]+r.top],p.tooltipShow(e)}),p.on("tooltipShow",function(e){a&&d(e)}),p.on("tooltipHide",function(){a&&e.tooltip.cleanup()}),v.legend=n,v.dispatch=p,v.pie=t,d3.rebind(v,t,"valueFormat","values","x","y","description","id","showLabels","donutLabelsOutside","pieLabelsOutside","labelType","donut","donutRatio","labelThreshold"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(r.top=typeof e.top!="undefined"?e.top:r.top,r.right=typeof e.right!="undefined"?e.right:r.right,r.bottom=typeof e.bottom!="undefined"?e.bottom:r.bottom,r.left=typeof e.left!="undefined"?e.left:r.left,v):r},v.width=function(e){return arguments.length?(i=e,v):i},v.height=function(e){return arguments.length?(s=e,v):s},v.color=function(r){return arguments.length?(u=e.utils.getColor(r),n.color(u),t.color(u),v):u},v.showLegend=function(e){return arguments.length?(o=e,v):o},v.tooltips=function(e){return arguments.length?(a=e,v):a},v.tooltipContent=function(e){return arguments.length?(f=e,v):f},v.state=function(e){return arguments.length?(l=e,v):l},v.defaultState=function(e){return arguments.length?(c=e,v):c},v.noData=function(e){return arguments.length?(h=e,v):h},v},e.models.scatter=function(){function I(q){return q.each(function(I){function Q(){if(!g)return!1;var e,i=d3.merge(I.map(function(e,t){return e.values.map(function(e,n){var r=f(e,n),i=l(e,n);return[o(r)+Math.random()*1e-7,u(i)+Math.random()*1e-7,t,n,e]}).filter(function(e,t){return b(e[4],t)})}));if(D===!0){if(x){var a=X.select("defs").selectAll(".nv-point-clips").data([s]).enter();a.append("clipPath").attr("class","nv-point-clips").attr("id","nv-points-clip-"+s);var c=X.select("#nv-points-clip-"+s).selectAll("circle").data(i);c.enter().append("circle").attr("r",T),c.exit().remove(),c.attr("cx",function(e){return e[0]}).attr("cy",function(e){return e[1]}),X.select(".nv-point-paths").attr("clip-path","url(#nv-points-clip-"+s+")")}i.length&&(i.push([o.range()[0]-20,u.range()[0]-20,null,null]),i.push([o.range()[1]+20,u.range()[1]+20,null,null]),i.push([o.range()[0]-20,u.range()[0]+20,null,null]),i.push([o.range()[1]+20,u.range()[1]-20,null,null]));var h=d3.geom.polygon([[-10,-10],[-10,r+10],[n+10,r+10],[n+10,-10]]),p=d3.geom.voronoi(i).map(function(e,t){return{data:h.clip(e),series:i[t][2],point:i[t][3]}}),d=X.select(".nv-point-paths").selectAll("path").data(p);d.enter().append("path").attr("class",function(e,t){return"nv-path-"+t}),d.exit().remove(),d.attr("d",function(e){return e.data.length===0?"M 0 0":"M"+e.data.join("L")+"Z"});var v=function(e,n){if(F)return 0;var r=I[e.series];if(typeof r=="undefined")return;var i=r.values[e.point];n({point:i,series:r,pos:[o(f(i,e.point))+t.left,u(l(i,e.point))+t.top],seriesIndex:e.series,pointIndex:e.point})};d.on("click",function(e){v(e,_.elementClick)}).on("mouseover",function(e){v(e,_.elementMouseover)}).on("mouseout",function(e,t){v(e,_.elementMouseout)})}else X.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementClick({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseover",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementMouseover({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseout",function(e,t){if(F||!I[e.series])return 0;var n=I[e.series],r=n.values[t];_.elementMouseout({point:r,series:n,seriesIndex:e.series,pointIndex:t})});F=!1}var q=n-t.left-t.right,R=r-t.top-t.bottom,U=d3.select(this);I.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var W=N&&C&&A?[]:d3.merge(I.map(function(e){return e.values.map(function(e,t){return{x:f(e,t),y:l(e,t),size:c(e,t)}})}));o.domain(N||d3.extent(W.map(function(e){return e.x}).concat(d))),w&&I[0]?o.range(k||[(q*E+q)/(2*I[0].values.length),q-q*(1+E)/(2*I[0].values.length)]):o.range(k||[0,q]),u.domain(C||d3.extent(W.map(function(e){return e.y}).concat(v))).range(L||[R,0]),a.domain(A||d3.extent(W.map(function(e){return e.size}).concat(m))).range(O||[16,256]);if(o.domain()[0]===o.domain()[1]||u.domain()[0]===u.domain()[1])M=!0;o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]-o.domain()[0]*.01,o.domain()[1]+o.domain()[1]*.01]):o.domain([-1,1])),u.domain()[0]===u.domain()[1]&&(u.domain()[0]?u.domain([u.domain()[0]-u.domain()[0]*.01,u.domain()[1]+u.domain()[1]*.01]):u.domain([-1,1])),isNaN(o.domain()[0])&&o.domain([-1,1]),isNaN(u.domain()[0])&&u.domain([-1,1]),P=P||o,H=H||u,B=B||a;var X=U.selectAll("g.nv-wrap.nv-scatter").data([I]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+s+(M?" nv-single-point":"")),$=V.append("defs"),J=V.append("g"),K=X.select("g");J.append("g").attr("class","nv-groups"),J.append("g").attr("class","nv-point-paths"),X.attr("transform","translate("+t.left+","+t.top+")"),$.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),X.select("#nv-edge-clip-"+s+" rect").attr("width",q).attr("height",R>0?R:0),K.attr("clip-path",S?"url(#nv-edge-clip-"+s+")":""),F=!0;var G=X.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});G.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),G.exit().remove(),G.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),G.style("fill",function(e,t){return i(e,t)}).style("stroke",function(e,t){return i(e,t)}).style("stroke-opacity",1).style("fill-opacity",.5);if(p){var Y=G.selectAll("circle.nv-point").data(function(e){return e.values},y);Y.enter().append("circle").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("cx",function(t,n){return e.utils.NaNtoZero(P(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(H(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)}),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)})}else{var Y=G.selectAll("path.nv-point").data(function(e){return e.values});Y.enter().append("path").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("transform",function(e,t){return"translate("+P(f(e,t))+","+H(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))})),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))}))}clearTimeout(j),j=setTimeout(Q,300),P=o.copy(),H=u.copy(),B=a.copy()}),I}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=d3.scale.linear(),u=d3.scale.linear(),a=d3.scale.linear(),f=function(e){return e.x},l=function(e){return e.y},c=function(e){return e.size||1},h=function(e){return e.shape||"circle"},p=!0,d=[],v=[],m=[],g=!0,y=null,b=function(e){return!e.notActive},w=!1,E=.1,S=!1,x=!0,T=function(){return 25},N=null,C=null,k=null,L=null,A=null,O=null,M=!1,_=d3.dispatch("elementClick","elementMouseover","elementMouseout"),D=!0,P,H,B,j,F=!1;return I.clearHighlights=function(){d3.selectAll(".nv-chart-"+s+" .nv-point.hover").classed("hover",!1)},I.highlightPoint=function(e,t,n){d3.select(".nv-chart-"+s+" .nv-series-"+e+" .nv-point-"+t).classed("hover",n)},_.on("elementMouseover.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!0)}),_.on("elementMouseout.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!1)}),I.dispatch=_,I.options=e.utils.optionsFunc.bind(I),I.x=function(e){return arguments.length?(f=d3.functor(e),I):f},I.y=function(e){return arguments.length?(l=d3.functor(e),I):l},I.size=function(e){return arguments.length?(c=d3.functor(e),I):c},I.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,I):t},I.width=function(e){return arguments.length?(n=e,I):n},I.height=function(e){return arguments.length?(r=e,I):r},I.xScale=function(e){return arguments.length?(o=e,I):o},I.yScale=function(e){return arguments.length?(u=e,I):u},I.zScale=function(e){return arguments.length?(a=e,I):a},I.xDomain=function(e){return arguments.length?(N=e,I):N},I.yDomain=function(e){return arguments.length?(C=e,I):C},I.sizeDomain=function(e){return arguments.length?(A=e,I):A},I.xRange=function(e){return arguments.length?(k=e,I):k},I.yRange=function(e){return arguments.length?(L=e,I):L},I.sizeRange=function(e){return arguments.length?(O=e,I):O},I.forceX=function(e){return arguments.length?(d=e,I):d},I.forceY=function(e){return arguments.length?(v=e,I):v},I.forceSize=function(e){return arguments.length?(m=e,I):m},I.interactive=function(e){return arguments.length?(g=e,I):g},I.pointKey=function(e){return arguments.length?(y=e,I):y},I.pointActive=function(e){return arguments.length?(b=e,I):b},I.padData=function(e){return arguments.length?(w=e,I):w},I.padDataOuter=function(e){return arguments.length?(E=e,I):E},I.clipEdge=function(e){return arguments.length?(S=e,I):S},I.clipVoronoi=function(e){return arguments.length?(x=e,I):x},I.useVoronoi=function(e){return arguments.length?(D=e,D===!1&&(x=!1),I):D},I.clipRadius=function(e){return arguments.length?(T=e,I):T},I.color=function(t){return arguments.length?(i=e.utils.getColor(t),I):i},I.shape=function(e){return arguments.length?(h=e,I):h},I.onlyCircles=function(e){return arguments.length?(p=e,I):p},I.id=function(e){return arguments.length?(s=e,I):s},I.singlePoint=function(e){return arguments.length?(M=e,I):M},I},e.models.scatterChart=function(){function F(e){return e.each(function(e){function J(){if(T)return W.select(".nv-point-paths").style("pointer-events","all"),!1;W.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(x).focus(i[0]),p.distortion(x).focus(i[1]),W.select(".nv-scatterWrap").call(t),b&&W.select(".nv-x.nv-axis").call(n),w&&W.select(".nv-y.nv-axis").call(r),W.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),W.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var C=d3.select(this),k=this,L=(f||parseInt(C.style("width"))||960)-a.left-a.right,D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom;F.update=function(){C.call(F)},F.container=this,A.disabled=e.map(function(e){return!!e.disabled});if(!O){var I;O={};for(I in A)A[I]instanceof Array?O[I]=A[I].slice(0):O[I]=A[I]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=C.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",a.left+L/2).attr("y",a.top+D/2).text(function(e){return e}),F}C.selectAll(".nv-noData").remove(),P=P||h,H=H||p;var R=C.selectAll("g.nv-wrap.nv-scatterChart").data([e]),U=R.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),z=U.append("g"),W=R.select("g");z.append("rect").attr("class","nvd3 nv-background"),z.append("g").attr("class","nv-x nv-axis"),z.append("g").attr("class","nv-y nv-axis"),z.append("g").attr("class","nv-scatterWrap"),z.append("g").attr("class","nv-distWrap"),z.append("g").attr("class","nv-legendWrap"),z.append("g").attr("class","nv-controlsWrap");if(y){var X=S?L/2:L;i.width(X),R.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom),R.select(".nv-legendWrap").attr("transform","translate("+(L-X)+","+ -a.top+")")}S&&(s.width(180).color(["#444"]),W.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -a.top+")").call(s)),R.attr("transform","translate("+a.left+","+a.top+")"),E&&W.select(".nv-y.nv-axis").attr("transform","translate("+L+",0)"),t.width(L).height(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),d!==0&&t.xDomain(null),v!==0&&t.yDomain(null),R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t);if(d!==0){var V=h.domain()[1]-h.domain()[0];t.xDomain([h.domain()[0]-d*V,h.domain()[1]+d*V])}if(v!==0){var $=p.domain()[1]-p.domain()[0];t.yDomain([p.domain()[0]-v*$,p.domain()[1]+v*$])}(v!==0||d!==0)&&R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),b&&(n.scale(h).ticks(n.ticks()&&n.ticks().length?n.ticks():L/100).tickSize(-D,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),w&&(r.scale(p).ticks(r.ticks()&&r.ticks().length?r.ticks():D/36).tickSize(-L,0),W.select(".nv-y.nv-axis").call(r)),m&&(o.getData(t.x()).scale(h).width(L).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),W.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),g&&(u.getData(t.y()).scale(p).width(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),W.select(".nv-distributionY").attr("transform","translate("+(E?L:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(W.select(".nv-background").attr("width",L).attr("height",D),W.select(".nv-background").on("mousemove",J),W.select(".nv-background").on("click",function(){T=!T}),t.dispatch.on("elementClick.freezeFisheye",function(){T=!T})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,x=e.disabled?0:2.5,W.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),W.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(x).focus(0),p.distortion(x).focus(0),W.select(".nv-scatterWrap").call(t),W.select(".nv-x.nv-axis").call(n),W.select(".nv-y.nv-axis").call(r)):T=!1,F.update()}),i.dispatch.on("stateChange",function(e){A.disabled=e.disabled,M.stateChange(A),F.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",function(t,n){return e.pos[1]-D}),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],M.tooltipShow(e)}),M.on("tooltipShow",function(e){N&&B(e,k.parentNode)}),M.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),A.disabled=t.disabled),F.update()}),P=h.copy(),H=p.copy()}),F}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=0,v=0,m=!1,g=!1,y=!0,b=!0,w=!0,E=!1,S=!!d3.fisheye,x=0,T=!1,N=!0,C=function(e,t,n){return"<strong>"+t+"</strong>"},k=function(e,t,n){return"<strong>"+n+"</strong>"},L=null,A={},O=null,M=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),_="No Data Available.",D=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(E?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var P,H,B=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));C!=null&&e.tooltip.show([f,l],C(i.series.key,v,m,i,F),"n",1,s,"x-nvtooltip"),k!=null&&e.tooltip.show([c,d],k(i.series.key,v,m,i,F),"e",1,s,"y-nvtooltip"),L!=null&&e.tooltip.show([o,u],L(i.series.key,v,m,i,F),i.value<0?"n":"s",null,s)},j=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){M.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),M.on("tooltipHide",function(){N&&e.tooltip.cleanup()}),F.dispatch=M,F.scatter=t,F.legend=i,F.controls=s,F.xAxis=n,F.yAxis=r,F.distX=o,F.distY=u,d3.rebind(F,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),F.options=e.utils.optionsFunc.bind(F),F.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,F):a},F.width=function(e){return arguments.length?(f=e,F):f},F.height=function(e){return arguments.length?(l=e,F):l},F.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),F):c},F.showDistX=function(e){return arguments.length?(m=e,F):m},F.showDistY=function(e){return arguments.length?(g=e,F):g},F.showControls=function(e){return arguments.length?(S=e,F):S},F.showLegend=function(e){return arguments.length?(y=e,F):y},F.showXAxis=function(e){return arguments.length?(b=e,F):b},F.showYAxis=function(e){return arguments.length?(w=e,F):w},F.rightAlignYAxis=function(e){return arguments.length?(E=e,r.orient(e?"right":"left"),F):E},F.fisheye=function(e){return arguments.length?(x=e,F):x},F.xPadding=function(e){return arguments.length?(d=e,F):d},F.yPadding=function(e){return arguments.length?(v=e,F):v},F.tooltips=function(e){return arguments.length?(N=e,F):N},F.tooltipContent=function(e){return arguments.length?(L=e,F):L},F.tooltipXContent=function(e){return arguments.length?(C=e,F):C},F.tooltipYContent=function(e){return arguments.length?(k=e,F):k},F.state=function(e){return arguments.length?(A=e,F):A},F.defaultState=function(e){return arguments.length?(O=e,F):O},F.noData=function(e){return arguments.length?(_=e,F):_},F.transitionDuration=function(e){return arguments.length?(D=e,F):D},F},e.models.scatterPlusLineChart=function(){function B(e){return e.each(function(e){function V(){if(S)return U.select(".nv-point-paths").style("pointer-events","all"),!1;U.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(E).focus(i[0]),p.distortion(E).focus(i[1]),U.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),g&&U.select(".nv-x.nv-axis").call(n),y&&U.select(".nv-y.nv-axis").call(r),U.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),U.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var T=d3.select(this),N=this,C=(f||parseInt(T.style("width"))||960)-a.left-a.right,M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom;B.update=function(){T.call(B)},B.container=this,k.disabled=e.map(function(e){return!!e.disabled});if(!L){var j;L={};for(j in k)k[j]instanceof Array?L[j]=k[j].slice(0):L[j]=k[j]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var F=T.selectAll(".nv-noData").data([O]);return F.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),F.attr("x",a.left+C/2).attr("y",a.top+M/2).text(function(e){return e}),B}T.selectAll(".nv-noData").remove(),h=t.xScale(),p=t.yScale(),_=_||h,D=D||p;var I=T.selectAll("g.nv-wrap.nv-scatterChart").data([e]),q=I.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),R=q.append("g"),U=I.select("g");R.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-scatterWrap"),R.append("g").attr("class","nv-regressionLinesWrap"),R.append("g").attr("class","nv-distWrap"),R.append("g").attr("class","nv-legendWrap"),R.append("g").attr("class","nv-controlsWrap"),I.attr("transform","translate("+a.left+","+a.top+")"),b&&U.select(".nv-y.nv-axis").attr("transform","translate("+C+",0)"),m&&(i.width(C/2),I.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom),I.select(".nv-legendWrap").attr("transform","translate("+C/2+","+ -a.top+")")),w&&(s.width(180).color(["#444"]),U.select(".nv-controlsWrap").datum(H).attr("transform","translate(0,"+ -a.top+")").call(s)),t.width(C).height(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),I.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),I.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+t.id()+")");var z=I.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(e){return e});z.enter().append("g").attr("class","nv-regLines");var W=z.selectAll(".nv-regLine").data(function(e){return[e]}),X=W.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0);W.attr("x1",h.range()[0]).attr("x2",h.range()[1]).attr("y1",function(e,t){return p(h.domain()[0]*e.slope+e.intercept)}).attr("y2",function(e,t){return p(h.domain()[1]*e.slope+e.intercept)}).style("stroke",function(e,t,n){return c(e,n)}).style("stroke-opacity",function(e,t){return e.disabled||typeof e.slope=="undefined"||typeof e.intercept=="undefined"?0:1}),g&&(n.scale(h).ticks(n.ticks()?n.ticks():C/100).tickSize(-M,0),U.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),y&&(r.scale(p).ticks(r.ticks()?r.ticks():M/36).tickSize(-C,0),U.select(".nv-y.nv-axis").call(r)),d&&(o.getData(t.x()).scale(h).width(C).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),U.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),v&&(u.getData(t.y()).scale(p).width(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),U.select(".nv-distributionY").attr("transform","translate("+(b?C:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(U.select(".nv-background").attr("width",C).attr("height",M),U.select(".nv-background").on("mousemove",V),U.select(".nv-background").on("click",function(){S=!S}),t.dispatch.on("elementClick.freezeFisheye",function(){S=!S})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,E=e.disabled?0:2.5,U.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),U.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(E).focus(0),p.distortion(E).focus(0),U.select(".nv-scatterWrap").call(t),U.select(".nv-x.nv-axis").call(n),U.select(".nv-y.nv-axis").call(r)):S=!1,B.update()}),i.dispatch.on("stateChange",function(e){k=e,A.stateChange(k),B.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",e.pos[1]-M),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],A.tooltipShow(e)}),A.on("tooltipShow",function(e){x&&P(e,N.parentNode)}),A.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),k.disabled=t.disabled),B.update()}),_=h.copy(),D=p.copy()}),B}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=!1,v=!1,m=!0,g=!0,y=!0,b=!1,w=!!d3.fisheye,E=0,S=!1,x=!0,T=function(e,t,n){return"<strong>"+t+"</strong>"},N=function(e,t,n){return"<strong>"+n+"</strong>"},C=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+r+"</p>"},k={},L=null,A=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),O="No Data Available.",M=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(b?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var _,D,P=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));T!=null&&e.tooltip.show([f,l],T(i.series.key,v,m,i,B),"n",1,s,"x-nvtooltip"),N!=null&&e.tooltip.show([c,d],N(i.series.key,v,m,i,B),"e",1,s,"y-nvtooltip"),C!=null&&e.tooltip.show([o,u],C(i.series.key,v,m,i.point.tooltip,i,B),i.value<0?"n":"s",null,s)},H=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){A.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),A.on("tooltipHide",function(){x&&e.tooltip.cleanup()}),B.dispatch=A,B.scatter=t,B.legend=i,B.controls=s,B.xAxis=n,B.yAxis=r,B.distX=o,B.distY=u,d3.rebind(B,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),B.options=e.utils.optionsFunc.bind(B),B.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,B):a},B.width=function(e){return arguments.length?(f=e,B):f},B.height=function(e){return arguments.length?(l=e,B):l},B.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),B):c},B.showDistX=function(e){return arguments.length?(d=e,B):d},B.showDistY=function(e){return arguments.length?(v=e,B):v},B.showControls=function(e){return arguments.length?(w=e,B):w},B.showLegend=function(e){return arguments.length?(m=e,B):m},B.showXAxis=function(e){return arguments.length?(g=e,B):g},B.showYAxis=function(e){return arguments.length?(y=e,B):y},B.rightAlignYAxis=function(e){return arguments.length?(b=e,r.orient(e?"right":"left"),B):b},B.fisheye=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(x=e,B):x},B.tooltipContent=function(e){return arguments.length?(C=e,B):C},B.tooltipXContent=function(e){return arguments.length?(T=e,B):T},B.tooltipYContent=function(e){return arguments.length?(N=e,B):N},B.state=function(e){return arguments.length?(k=e,B):k},B.defaultState=function(e){return arguments.length?(L=e,B):L},B.noData=function(e){return arguments.length?(O=e,B):O},B.transitionDuration=function(e){return arguments.length?(M=e,B):M},B},e.models.sparkline=function(){function d(e){return e.each(function(e){var i=n-t.left-t.right,d=r-t.top-t.bottom,v=d3.select(this);s.domain(l||d3.extent(e,u)).range(h||[0,i]),o.domain(c||d3.extent(e,a)).range(p||[d,0]);var m=v.selectAll("g.nv-wrap.nv-sparkline").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline"),b=g.append("g"),w=m.select("g");m.attr("transform","translate("+t.left+","+t.top+")");var E=m.selectAll("path").data(function(e){return[e]});E.enter().append("path"),E.exit().remove(),E.style("stroke",function(e,t){return e.color||f(e,t)}).attr("d",d3.svg.line().x(function(e,t){return s(u(e,t))}).y(function(e,t){return o(a(e,t))}));var S=m.selectAll("circle.nv-point").data(function(e){function n(t){if(t!=-1){var n=e[t];return n.pointIndex=t,n}return null}var t=e.map(function(e,t){return a(e,t)}),r=n(t.lastIndexOf(o.domain()[1])),i=n(t.indexOf(o.domain()[0])),s=n(t.length-1);return[i,r,s].filter(function(e){return e!=null})});S.enter().append("circle"),S.exit().remove(),S.attr("cx",function(e,t){return s(u(e,e.pointIndex))}).attr("cy",function(e,t){return o(a(e,e.pointIndex))}).attr("r",2).attr("class",function(e,t){return u(e,e.pointIndex)==s.domain()[1]?"nv-point nv-currentValue":a(e,e.pointIndex)==o.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),d}var t={top:2,right:0,bottom:2,left:0},n=400,r=32,i=!0,s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=e.utils.getColor(["#000"]),l,c,h,p;return d.options=e.utils.optionsFunc.bind(d),d.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,d):t},d.width=function(e){return arguments.length?(n=e,d):n},d.height=function(e){return arguments.length?(r=e,d):r},d.x=function(e){return arguments.length?(u=d3.functor(e),d):u},d.y=function(e){return arguments.length?(a=d3.functor(e),d):a},d.xScale=function(e){return arguments.length?(s=e,d):s},d.yScale=function(e){return arguments.length?(o=e,d):o},d.xDomain=function(e){return arguments.length?(l=e,d):l},d.yDomain=function(e){return arguments.length?(c=e,d):c},d.xRange=function(e){return arguments.length?(h=e,d):h},d.yRange=function(e){return arguments.length?(p=e,d):p},d.animate=function(e){return arguments.length?(i=e,d):i},d.color=function(t){return arguments.length?(f=e.utils.getColor(t),d):f},d},e.models.sparklinePlus=function(){function v(e){return e.each(function(c){function O(){if(a)return;var e=C.selectAll(".nv-hoverValue").data(u),r=e.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);e.exit().style("stroke-opacity",0).style("fill-opacity",0).remove(),e.attr("transform",function(e){return"translate("+s(t.x()(c[e],e))+",0)"}).style("stroke-opacity",1).style("fill-opacity",1);if(!u.length)return;r.append("line").attr("x1",0).attr("y1",-n.top).attr("x2",0).attr("y2",b),r.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-n.top).attr("text-anchor","end").attr("dy",".9em"),C.select(".nv-hoverValue .nv-xValue").text(f(t.x()(c[u[0]],u[0]))),r.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-n.top).attr("text-anchor","start").attr("dy",".9em"),C.select(".nv-hoverValue .nv-yValue").text(l(t.y()(c[u[0]],u[0])))}function M(){function r(e,n){var r=Math.abs(t.x()(e[0],0)-n),i=0;for(var s=0;s<e.length;s++)Math.abs(t.x()(e[s],s)-n)<r&&(r=Math.abs(t.x()(e[s],s)-n),i=s);return i}if(a)return;var e=d3.mouse(this)[0]-n.left;u=[r(c,Math.round(s.invert(e)))],O()}var m=d3.select(this),g=(r||parseInt(m.style("width"))||960)-n.left-n.right,b=(i||parseInt(m.style("height"))||400)-n.top-n.bottom;v.update=function(){v(e)},v.container=this;if(!c||!c.length){var w=m.selectAll(".nv-noData").data([d]);return w.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),w.attr("x",n.left+g/2).attr("y",n.top+b/2).text(function(e){return e}),v}m.selectAll(".nv-noData").remove();var E=t.y()(c[c.length-1],c.length-1);s=t.xScale(),o=t.yScale();var S=m.selectAll("g.nv-wrap.nv-sparklineplus").data([c]),T=S.enter().append("g").attr("class","nvd3 nv-wrap nv-sparklineplus"),N=T.append("g"),C=S.select("g");N.append("g").attr("class","nv-sparklineWrap"),N.append("g").attr("class","nv-valueWrap"),N.append("g").attr("class","nv-hoverArea"),S.attr("transform","translate("+n.left+","+n.top+")");var k=C.select(".nv-sparklineWrap");t.width(g).height(b),k.call(t);var L=C.select(".nv-valueWrap"),A=L.selectAll(".nv-currentValue").data([E]);A.enter().append("text").attr("class","nv-currentValue").attr("dx",p?-8:8).attr("dy",".9em").style("text-anchor",p?"end":"start"),A.attr("x",g+(p?n.right:0)).attr("y",h?function(e){return o(e)}:0).style("fill",t.color()(c[c.length-1],c.length-1)).text(l(E)),N.select(".nv-hoverArea").append("rect").on("mousemove",M).on("click",function(){a=!a}).on("mouseout",function(){u=[],O()}),C.select(".nv-hoverArea rect").attr("transform",function(e){return"translate("+ -n.left+","+ -n.top+")"}).attr("width",g+n.left+n.right).attr("height",b+n.top)}),v}var t=e.models.sparkline(),n={top:15,right:100,bottom:10,left:50},r=null,i=null,s,o,u=[],a=!1,f=d3.format(",r"),l=d3.format(",.2f"),c=!0,h=!0,p=!1,d="No Data Available.";return v.sparkline=t,d3.rebind(v,t,"x","y","xScale","yScale","color"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,v):n},v.width=function(e){return arguments.length?(r=e,v):r},v.height=function(e){return arguments.length?(i=e,v):i},v.xTickFormat=function(e){return arguments.length?(f=e,v):f},v.yTickFormat=function(e){return arguments.length?(l=e,v):l},v.showValue=function(e){return arguments.length?(c=e,v):c},v.alignValue=function(e){return arguments.length?(h=e,v):h},v.rightAlignValue=function(e){return arguments.length?(p=e,v):p},v.noData=function(e){return arguments.length?(d=e,v):d},v},e.models.stackedArea=function(){function g(e){return e.each(function(e){var a=n-t.left-t.right,b=r-t.top-t.bottom,w=d3.select(this);p=v.xScale(),d=v.yScale();var E=e;e.forEach(function(e,t){e.seriesIndex=t,e.values=e.values.map(function(e,n){return e.index=n,e.seriesIndex=t,e})});var S=e.filter(function(e){return!e.disabled});e=d3.layout.stack().order(l).offset(f).values(function(e){return e.values}).x(o).y(u).out(function(e,t,n){var r=u(e)===0?0:n;e.display={y:r,y0:t}})(S);var T=w.selectAll("g.nv-wrap.nv-stackedarea").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedarea"),C=N.append("defs"),k=N.append("g"),L=T.select("g");k.append("g").attr("class","nv-areaWrap"),k.append("g").attr("class","nv-scatterWrap"),T.attr("transform","translate("+t.left+","+t.top+")"),v.width(a).height(b).x(o).y(function(e){return e.display.y+e.display.y0}).forceY([0]).color(e.map(function(e,t){return e.color||i(e,e.seriesIndex)}));var A=L.select(".nv-scatterWrap").datum(e);A.call(v),C.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),T.select("#nv-edge-clip-"+s+" rect").attr("width",a).attr("height",b),L.attr("clip-path",h?"url(#nv-edge-clip-"+s+")":"");var O=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y+e.display.y0)}).interpolate(c),M=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y0)}),_=L.select(".nv-areaWrap").selectAll("path.nv-area").data(function(e){return e});_.enter().append("path").attr("class",function(e,t){return"nv-area nv-area-"+t}).attr("d",function(e,t){return M(e.values,e.seriesIndex)}).on("mouseover",function(e,t){d3.select(this).classed("hover",!0),m.areaMouseover({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),m.areaMouseout({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("click",function(e,t){d3.select(this).classed("hover",!1),m.areaClick({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}),_.exit().remove(),_.style("fill",function(e,t){return e.color||i(e,e.seriesIndex)}).style("stroke",function(e,t){return e.color||i(e,e.seriesIndex)}),_.attr("d",function(e,t){return O(e.values,t)}),v.dispatch.on("elementMouseover.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!0)}),v.dispatch.on("elementMouseout.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!1)}),g.d3_stackedOffset_stackPercent=function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,a=[];for(s=0;s<n;++s){for(i=0,o=0;i<E.length;i++)o+=u(E[i].values[s]);if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)a[s]=0;return a}}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=function(e){return e.x},u=function(e){return e.y},a="stack",f="zero",l="default",c="linear",h=!1,p,d,v=e.models.scatter(),m=d3.dispatch("tooltipShow","tooltipHide","areaClick","areaMouseover","areaMouseout");return v.size(2.2).sizeDomain([2.2,2.2]),v.dispatch.on("elementClick.area",function(e){m.areaClick(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],m.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){m.tooltipHide(e)}),g.dispatch=m,g.scatter=v,d3.rebind(g,v,"interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","highlightPoint","clearHighlights"),g.options=e.utils.optionsFunc.bind(g),g.x=function(e){return arguments.length?(o=d3.functor(e),g):o},g.y=function(e){return arguments.length?(u=d3.functor(e),g):u},g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.clipEdge=function(e){return arguments.length?(h=e,g):h},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),g):i},g.offset=function(e){return arguments.length?(f=e,g):f},g.order=function(e){return arguments.length?(l=e,g):l},g.style=function(e){if(!arguments.length)return a;a=e;switch(a){case"stack":g.offset("zero"),g.order("default");break;case"stream":g.offset("wiggle"),g.order("inside-out");break;case"stream-center":g.offset("silhouette"),g.order("inside-out");break;case"expand":g.offset("expand"),g.order("default");break;case"stack_percent":g.offset(g.d3_stackedOffset_stackPercent),g.order("default")}return g},g.interpolate=function(e){return arguments.length?(c=e,g):c},g},e.models.stackedAreaChart=function(){function M(y){return y.each(function(y){var A=d3.select(this),_=this,D=(a||parseInt(A.style("width"))||960)-u.left-u.right,P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom;M.update=function(){A.call(M)},M.container=this,S.disabled=y.map(function(e){return!!e.disabled});if(!x){var H;x={};for(H in S)S[H]instanceof Array?x[H]=S[H].slice(0):x[H]=S[H]}if(!y||!y.length||!y.filter(function(e){return e.values.length}).length){var B=A.selectAll(".nv-noData").data([T]);return B.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),B.attr("x",u.left+D/2).attr("y",u.top+P/2).text(function(e){return e}),M}A.selectAll(".nv-noData").remove(),b=t.xScale(),w=t.yScale();var j=A.selectAll("g.nv-wrap.nv-stackedAreaChart").data([y]),F=j.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),I=j.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-stackedWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-controlsWrap"),F.append("g").attr("class","nv-interactive"),I.select("rect").attr("width",D).attr("height",P);if(h){var q=c?D-C:D;i.width(q),I.select(".nv-legendWrap").datum(y).call(i),u.top!=i.height()&&(u.top=i.height(),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-legendWrap").attr("transform","translate("+(D-q)+","+ -u.top+")")}if(c){var R=[{key:L.stacked||"Stacked",metaKey:"Stacked",disabled:t.style()!="stack",style:"stack"},{key:L.stream||"Stream",metaKey:"Stream",disabled:t.style()!="stream",style:"stream"},{key:L.expanded||"Expanded",metaKey:"Expanded",disabled:t.style()!="expand",style:"expand"},{key:L.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:t.style()!="stack_percent",style:"stack_percent"}];C=k.length/3*260,R=R.filter(function(e){return k.indexOf(e.metaKey)!==-1}),s.width(C).color(["#444","#444","#444"]),I.select(".nv-controlsWrap").datum(R).call(s),u.top!=Math.max(s.height(),i.height())&&(u.top=Math.max(s.height(),i.height()),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-controlsWrap").attr("transform","translate(0,"+ -u.top+")")}j.attr("transform","translate("+u.left+","+u.top+")"),v&&I.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),m&&(o.width(D).height(P).margin({left:u.left,top:u.top}).svgContainer(A).xScale(b),j.select(".nv-interactive").call(o)),t.width(D).height(P);var U=I.select(".nv-stackedWrap").datum(y);U.call(t),p&&(n.scale(b).ticks(D/100).tickSize(-P,0),I.select(".nv-x.nv-axis").attr("transform","translate(0,"+P+")"),I.select(".nv-x.nv-axis").call(n)),d&&(r.scale(w).ticks(t.offset()=="wiggle"?0:P/36).tickSize(-D,0).setTickFormat(t.style()=="expand"||t.style()=="stack_percent"?d3.format("%"):E),I.select(".nv-y.nv-axis").call(r)),t.dispatch.on("areaClick.toggle",function(e){y.filter(function(e){return!e.disabled}).length===1?y.forEach(function(e){e.disabled=!1}):y.forEach(function(t,n){t.disabled=n!=e.seriesIndex}),S.disabled=y.map(function(e){return!!e.disabled}),N.stateChange(S),M.update()}),i.dispatch.on("stateChange",function(e){S.disabled=e.disabled,N.stateChange(S),M.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;R=R.map(function(e){return e.disabled=!0,e}),e.disabled=!1,t.style(e.style),S.style=t.style(),N.stateChange(S),M.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,a,f,c=[];y.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){a=e.interactiveBisect(n.values,i.pointXValue,M.x()),t.highlightPoint(r,a,!0);var o=n.values[a];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof f=="undefined"&&(f=M.xScale()(M.x()(o,a)));var u=t.style()=="expand"?o.display.y:M.y()(o,a);c.push({key:n.key,value:u,color:l(n,n.seriesIndex),stackedValue:o.display})}),c.reverse();if(c.length>2){var h=M.yScale().invert(i.mouseY),p=Infinity,d=null;c.forEach(function(e,t){h=Math.abs(h);var n=Math.abs(e.stackedValue.y0),r=Math.abs(e.stackedValue.y);if(h>=n&&h<=r+n){d=t;return}}),d!=null&&(c[d].highlight=!0)}var v=n.tickFormat()(M.x()(s,a)),m=t.style()=="expand"?function(e,t){return d3.format(".1%")(e)}:function(e,t){return r.tickFormat()(e)};o.tooltip.position({left:f+u.left,top:i.mouseY+u.top}).chartContainer(_.parentNode).enabled(g).valueFormatter(m).data({value:v,series:c})(),o.renderGuideLine(f)}),o.dispatch.on("elementMouseout",function(e){N.tooltipHide(),t.clearHighlights()}),N.on("tooltipShow",function(e){g&&O(e,_.parentNode)}),N.on("changeState",function(e){typeof e.disabled!="undefined"&&y.length===e.disabled.length&&(y.forEach(function(t,n){t.disabled=e.disabled[n]}),S.disabled=e.disabled),typeof e.style!="undefined"&&t.style(e.style),M.update()})}),M}var t=e.models.stackedArea(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:25,bottom:50,left:60},a=null,f=null,l=e.utils.defaultColor(),c=!0,h=!0,p=!0,d=!0,v=!1,m=!1,g=!0,y=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},b,w,E=d3.format(",.2f"),S={style:t.style()},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=250,k=["Stacked","Stream","Expanded"],L={},A=0;n.orient("bottom").tickPadding(7),r.orient(v?"right":"left"),s.updateState(!1);var O=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=y(i.series.key,a,f,i,M);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("tooltipShow",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],N.tooltipShow(e)}),t.dispatch.on("tooltipHide",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){g&&e.tooltip.cleanup()}),M.dispatch=N,M.stacked=t,M.legend=i,M.controls=s,M.xAxis=n,M.yAxis=r,M.interactiveLayer=o,d3.rebind(M,t,"x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","sizeDomain","interactive","useVoronoi","offset","order","style","clipEdge","forceX","forceY","forceSize","interpolate"),M.options=e.utils.optionsFunc.bind(M),M.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,M):u},M.width=function(e){return arguments.length?(a=e,M):a},M.height=function(e){return arguments.length?(f=e,M):f},M.color=function(n){return arguments.length?(l=e.utils.getColor(n),i.color(l),t.color(l),M):l},M.showControls=function(e){return arguments.length?(c=e,M):c},M.showLegend=function(e){return arguments.length?(h=e,M):h},M.showXAxis=function(e){return arguments.length?(p=e,M):p},M.showYAxis=function(e){return arguments.length?(d=e,M):d},M.rightAlignYAxis=function(e){return arguments.length?(v=e,r.orient(e?"right":"left"),M):v},M.useInteractiveGuideline=function(e){return arguments.length?(m=e,e===!0&&(M.interactive(!1),M.useVoronoi(!1)),M):m},M.tooltip=function(e){return arguments.length?(y=e,M):y},M.tooltips=function(e){return arguments.length?(g=e,M):g},M.tooltipContent=function(e){return arguments.length?(y=e,M):y},M.state=function(e){return arguments.length?(S=e,M):S},M.defaultState=function(e){return arguments.length?(x=e,M):x},M.noData=function(e){return arguments.length?(T=e,M):T},M.transitionDuration=function(e){return arguments.length?(A=e,M):A},M.controlsData=function(e){return arguments.length?(k=e,M):k},M.controlLabels=function(e){return arguments.length?typeof e!="object"?L:(L=e,M):L},r.setTickFormat=r.tickFormat,r.tickFormat=function(e){return arguments.length?(E=e,r):E},M}}(),define("plugin/plugins/nvd3/nv.d3",function(){}),define("plugin/charts/nvd3/common/config",["plugin/plugins/nvd3/nv.d3"],function(){return{title:"",category:"",library:"NVD3",tag:"svg",keywords:"default nvd3",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},use_panels:{title:"Use multi-panels",info:"Would you like to separate your data into individual panels?",type:"radiobutton",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/nvd3/bar/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked",category:"Bar diagrams",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_horizontal/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Horizontal",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}},settings:{x_axis_type:{init:"hide"}}})}),define("plugin/charts/nvd3/bar_horizontal_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked horizontal",category:"Bar diagrams",settings:{x_axis_type:{init:"hide"}},columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/line_focus/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line with focus",category:"Others",keywords:"default nvd3",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/pie/config",["plugin/plugins/nvd3/nv.d3"],function(){return $.extend(!0,{},{title:"Pie chart",category:"Area charts",library:"NVD3",tag:"svg",keywords:"default nvd3",use_panels:!0,columns:{label:{title:"Labels",is_label:!0,is_auto:!0},y:{title:"Values",is_numeric:!0}},settings:{show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},donut_ratio:{title:"Donut ratio",info:"Determine how large the donut hole will be.",type:"select",init:"0.5",data:[{label:"50%",value:"0.5"},{label:"25%",value:"0.25"},{label:"10%",value:"0.10"},{label:"0%",value:"0"}]},label_separator:{type:"separator",title:"Label settings"},label_type:{title:"Donut label",info:"What would you like to show for each slice?",type:"select",init:"percent",data:[{label:"-- Nothing --",value:"hide",hide:"label_outside"},{label:"Label column",value:"key",show:"label_outside"},{label:"Value column",value:"value",show:"label_outside"},{label:"Percentage",value:"percent",show:"label_outside"}]},label_outside:{title:"Show outside",info:"Would you like to show labels outside the donut?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}})}),define("plugin/charts/nvd3/stackedarea_full/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Expanded",zoomable:"axis",category:"Area charts",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea_stream/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stream",category:"Area charts",zoomable:"axis",keywords:"default nvd3",showmaxmin:!0,columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/histogram/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogram",columns:{y:{title:"Observations",is_numeric:!0}},settings:{x_axis_label:{init:"Values"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/histogram_discrete/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Discrete Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogramdiscrete",columns:{x:{title:"Observations",is_label:!0}},settings:{x_axis_label:{init:"Breaks"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/line/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/scatter/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",zoomable:"axis",category:"Area charts",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/flot/common/config",[],function(){return{title:"",category:"",library:"Flotr2",tag:"div",keywords:"default flotr2",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},legend_enabled:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/flot/bar/config",["plugin/charts/flot/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/dygraph/common/config",[],function(){return{title:"",category:"",library:"Dygraph",tag:"div",keywords:"default dygraph",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},legend_enabled:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/dygraph/bar/config",["plugin/charts/dygraph/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/others/boxplot/config",[],function(){return $.extend(!0,{},{title:"Box plot",category:"Data processing (requires 'charts' tool from Toolshed)",library:"Highcharts",tag:"div",execute:"boxplot",keywords:"default others",columns:{y:{title:"Observations",is_numeric:!0}},settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},y_axis_grid:{title:"Axis grid",info:"Would you like to show grid lines for this axis?",type:"radiobutton",init:"1",data:[{label:"On",value:"1"},{label:"Off",value:"0"}]}}})}),define("plugin/charts/types",["plugin/charts/nvd3/bar/config","plugin/charts/nvd3/bar_stacked/config","plugin/charts/nvd3/bar_horizontal/config","plugin/charts/nvd3/bar_horizontal_stacked/config","plugin/charts/nvd3/line_focus/config","plugin/charts/nvd3/pie/config","plugin/charts/nvd3/stackedarea_full/config","plugin/charts/nvd3/stackedarea_stream/config","plugin/charts/nvd3/histogram/config","plugin/charts/nvd3/histogram_discrete/config","plugin/charts/nvd3/line/config","plugin/charts/nvd3/scatter/config","plugin/charts/nvd3/stackedarea/config","plugin/charts/flot/bar/config","plugin/charts/dygraph/bar/config","plugin/charts/others/boxplot/config"],function(e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v){return Backbone.Model.extend({defaults:{nvd3_bar:e,nvd3_bar_stacked:t,nvd3_bar_horizontal:n,nvd3_bar_horizontal_stacked:r,nvd3_line_focus:i,nvd3_stackedarea:h,nvd3_stackedarea_full:o,nvd3_stackedarea_stream:u,nvd3_pie:s,nvd3_line:l,nvd3_scatter:c,nvd3_histogram:a,nvd3_histogram_discrete:f,flot_bar:p}})}),define("plugin/app",["mvc/ui/ui-modal","mvc/ui/ui-portlet","plugin/library/ui","utils/utils","plugin/library/jobs","plugin/library/datasets","plugin/library/storage","plugin/views/viewer","plugin/views/editor","plugin/models/config","plugin/models/chart","plugin/charts/types"],function(e,t,n,r,i,s,o,u,a,f,l,c){return Backbone.View.extend({initialize:function(t){this.options=t,Galaxy&&Galaxy.modal?this.modal=Galaxy.modal:this.modal=new e.View,this.config=new f,this.types=new c,this.chart=new l,this.jobs=new i(this),this.datasets=new s(this),this.storage=new o(this),this.viewer_view=new u(this),this.editor_view=new a(this),this.$el.append(this.viewer_view.$el),this.$el.append(this.editor_view.$el);if(!this.storage.load())this.go("editor");else{this.go("viewer");var n=this;this.chart.deferred.execute(function(){n.chart.trigger("redraw")})}},go:function(e){$(".tooltip").hide();switch(e){case"editor":this.editor_view.show(),this.viewer_view.hide();break;case"viewer":this.editor_view.hide(),this.viewer_view.show()}},chartPath:function(e){var t=e.split(/_(.+)/);return t.length>=2?t[0]+"/"+t[1]:(console.debug("FAILED App:chartPath() - Invalid format: "+e),undefined)},execute:function(e){},onunload:function(){},log:function(e,t){console.log(e+" "+t)}})});
\ No newline at end of file
+define("mvc/ui/ui-modal",[],function(){var e=Backbone.View.extend({elMain:"body",optionsDefault:{title:"ui-modal",body:"",backdrop:!0,height:null,width:null,closing_events:!1,closing_callback:null},buttonList:{},initialize:function(e){e&&this._create(e)},show:function(e){this.initialize(e),this.options.height?(this.$body.css("height",this.options.height),this.$body.css("overflow","hidden")):this.$body.css("max-height",$(window).height()/2),this.options.width&&this.$dialog.css("width",this.options.width),this.visible?this.$el.show():this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.visible=!1,this.$el.fadeOut("fast"),this.options.closing_callback&&this.options.closing_callback()},enableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).prop("disabled",!0)},showButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).show()},hideButton:function(e){var t=this.buttonList[e];this.$buttons.find("#"+t).hide()},getButton:function(e){var t=this.buttonList[e];return this.$buttons.find("#"+t)},scrollTop:function(){return this.$body.scrollTop()},_create:function(e){var t=this;this.options=_.defaults(e,this.optionsDefault),this.options.body=="progress"&&(this.options.body=$('<div class="progress progress-striped active"><div class="progress-bar progress-bar-info" style="width:100%"></div></div>')),this.$el&&(this.$el.remove(),$(document).off("keyup.ui-modal")),this.setElement(this._template(this.options.title)),this.$dialog=this.$el.find(".modal-dialog"),this.$body=this.$el.find(".modal-body"),this.$footer=this.$el.find(".modal-footer"),this.$buttons=this.$el.find(".buttons"),this.$backdrop=this.$el.find(".modal-backdrop"),this.$body.html(this.options.body),this.options.backdrop||this.$backdrop.removeClass("in");if(this.options.buttons){this.buttonList={};var n=0;$.each(this.options.buttons,function(e,r){var i="button-"+n++;t.$buttons.append($('<button id="'+i+'"></button>').text(e).click(r)).append(" "),t.buttonList[e]=i})}else this.$footer.hide();$(this.elMain).append($(this.el)),this.options.closing_events&&($(document).on("keyup.ui-modal",function(e){e.keyCode==27&&t.hide()}),this.$el.find(".modal-backdrop").on("click",function(){t.hide()}))},_template:function(e){return'<div class="ui-modal modal"><div class="modal-backdrop fade in" style="z-index: -1;"></div><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" style="display: none;">×</button><h4 class="title">'+e+"</h4>"+"</div>"+'<div class="modal-body" style="position: static;"></div>'+'<div class="modal-footer">'+'<div class="buttons" style="float: right;"></div>'+"</div>"+"</div"+"</div>"+"</div>"}});return{View:e}}),function(){var e=this,t=e._,n={},r=Array.prototype,i=Object.prototype,s=Function.prototype,o=r.push,u=r.slice,a=r.concat,f=i.toString,l=i.hasOwnProperty,c=r.forEach,h=r.map,p=r.reduce,d=r.reduceRight,v=r.filter,m=r.every,g=r.some,y=r.indexOf,b=r.lastIndexOf,w=Array.isArray,E=Object.keys,S=s.bind,x=function(e){if(e instanceof x)return e;if(!(this instanceof x))return new x(e);this._wrapped=e};typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(exports=module.exports=x),exports._=x):e._=x,x.VERSION="1.4.4";var T=x.each=x.forEach=function(e,t,r){if(e==null)return;if(c&&e.forEach===c)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,s=e.length;i<s;i++)if(t.call(r,e[i],i,e)===n)return}else for(var o in e)if(x.has(e,o)&&t.call(r,e[o],o,e)===n)return};x.map=x.collect=function(e,t,n){var r=[];return e==null?r:h&&e.map===h?e.map(t,n):(T(e,function(e,i,s){r.push(t.call(n,e,i,s))}),r)};var N="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(p&&e.reduce===p)return r&&(t=x.bind(t,r)),i?e.reduce(t,n):e.reduce(t);T(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(N);return n},x.reduceRight=x.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(d&&e.reduceRight===d)return r&&(t=x.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=x.keys(e);s=o.length}T(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(N);return n},x.find=x.detect=function(e,t,n){var r;return C(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},x.filter=x.select=function(e,t,n){var r=[];return e==null?r:v&&e.filter===v?e.filter(t,n):(T(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},x.reject=function(e,t,n){return x.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},x.every=x.all=function(e,t,r){t||(t=x.identity);var i=!0;return e==null?i:m&&e.every===m?e.every(t,r):(T(e,function(e,s,o){if(!(i=i&&t.call(r,e,s,o)))return n}),!!i)};var C=x.some=x.any=function(e,t,r){t||(t=x.identity);var i=!1;return e==null?i:g&&e.some===g?e.some(t,r):(T(e,function(e,s,o){if(i||(i=t.call(r,e,s,o)))return n}),!!i)};x.contains=x.include=function(e,t){return e==null?!1:y&&e.indexOf===y?e.indexOf(t)!=-1:C(e,function(e){return e===t})},x.invoke=function(e,t){var n=u.call(arguments,2),r=x.isFunction(t);return x.map(e,function(e){return(r?t:e[t]).apply(e,n)})},x.pluck=function(e,t){return x.map(e,function(e){return e[t]})},x.where=function(e,t,n){return x.isEmpty(t)?n?void 0:[]:x[n?"find":"filter"](e,function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0})},x.findWhere=function(e,t){return x.where(e,t,!0)},x.max=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&x.isEmpty(e))return-Infinity;var r={computed:-Infinity,value:-Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o>=r.computed&&(r={value:e,computed:o})}),r.value},x.min=function(e,t,n){if(!t&&x.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&x.isEmpty(e))return Infinity;var r={computed:Infinity,value:Infinity};return T(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o<r.computed&&(r={value:e,computed:o})}),r.value},x.shuffle=function(e){var t,n=0,r=[];return T(e,function(e){t=x.random(n++),r[n-1]=r[t],r[t]=e}),r};var k=function(e){return x.isFunction(e)?e:function(t){return t[e]}};x.sortBy=function(e,t,n){var r=k(t);return x.pluck(x.map(e,function(e,t,i){return{value:e,index:t,criteria:r.call(n,e,t,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index<t.index?-1:1}),"value")};var L=function(e,t,n,r){var i={},s=k(t==null?x.identity:t);return T(e,function(t,o){var u=s.call(n,t,o,e);r(i,u,t)}),i};x.groupBy=function(e,t,n){return L(e,t,n,function(e,t,n){(x.has(e,t)?e[t]:e[t]=[]).push(n)})},x.countBy=function(e,t,n){return L(e,t,n,function(e,t){x.has(e,t)||(e[t]=0),e[t]++})},x.sortedIndex=function(e,t,n,r){n=n==null?x.identity:k(n);var i=n.call(r,t),s=0,o=e.length;while(s<o){var u=s+o>>>1;n.call(r,e[u])<i?s=u+1:o=u}return s},x.toArray=function(e){return e?x.isArray(e)?u.call(e):e.length===+e.length?x.map(e,x.identity):x.values(e):[]},x.size=function(e){return e==null?0:e.length===+e.length?e.length:x.keys(e).length},x.first=x.head=x.take=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,0,t):e[0]},x.initial=function(e,t,n){return u.call(e,0,e.length-(t==null||n?1:t))},x.last=function(e,t,n){return e==null?void 0:t!=null&&!n?u.call(e,Math.max(e.length-t,0)):e[e.length-1]},x.rest=x.tail=x.drop=function(e,t,n){return u.call(e,t==null||n?1:t)},x.compact=function(e){return x.filter(e,x.identity)};var A=function(e,t,n){return T(e,function(e){x.isArray(e)?t?o.apply(n,e):A(e,t,n):n.push(e)}),n};x.flatten=function(e,t){return A(e,t,[])},x.without=function(e){return x.difference(e,u.call(arguments,1))},x.uniq=x.unique=function(e,t,n,r){x.isFunction(t)&&(r=n,n=t,t=!1);var i=n?x.map(e,n,r):e,s=[],o=[];return T(i,function(n,r){if(t?!r||o[o.length-1]!==n:!x.contains(o,n))o.push(n),s.push(e[r])}),s},x.union=function(){return x.uniq(a.apply(r,arguments))},x.intersection=function(e){var t=u.call(arguments,1);return x.filter(x.uniq(e),function(e){return x.every(t,function(t){return x.indexOf(t,e)>=0})})},x.difference=function(e){var t=a.apply(r,u.call(arguments,1));return x.filter(e,function(e){return!x.contains(t,e)})},x.zip=function(){var e=u.call(arguments),t=x.max(x.pluck(e,"length")),n=new Array(t);for(var r=0;r<t;r++)n[r]=x.pluck(e,""+r);return n},x.unzip=function(e){var t=[];return x.each(e,function(e,n){x.each(e,function(e,r){t.length<=r&&(t[r]=[]),t[r][n]=e})}),t},x.object=function(e,t){if(e==null)return{};var n={};for(var r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},x.indexOf=function(e,t,n){if(e==null)return-1;var r=0,i=e.length;if(n){if(typeof n!="number")return r=x.sortedIndex(e,t),e[r]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(y&&e.indexOf===y)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},x.lastIndexOf=function(e,t,n){if(e==null)return-1;var r=n!=null;if(b&&e.lastIndexOf===b)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);var i=r?n:e.length;while(i--)if(e[i]===t)return i;return-1},x.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s};var O=function(){};x.bind=function(e,t){var n,r;if(e.bind===S&&S)return S.apply(e,u.call(arguments,1));if(!x.isFunction(e))throw new TypeError;return n=u.call(arguments,2),r=function(){if(this instanceof r){O.prototype=e.prototype;var i=new O;O.prototype=null;var s=e.apply(i,n.concat(u.call(arguments)));return Object(s)===s?s:i}return e.apply(t,n.concat(u.call(arguments)))}},x.partial=function(e){var t=u.call(arguments,1);return function(){return e.apply(this,t.concat(u.call(arguments)))}},x.bindAll=function(e){var t=u.call(arguments,1);if(t.length===0)throw new Error("bindAll must be passed function names");return T(t,function(t){e[t]=x.bind(e[t],e)}),e},x.memoize=function(e,t){var n={};return t||(t=x.identity),function(){var r=t.apply(this,arguments);return x.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},x.delay=function(e,t){var n=u.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},x.defer=function(e){return x.delay.apply(x,[e,1].concat(u.call(arguments,1)))},x.throttle=function(e,t,n){var r,i,s,o,u=0,a=function(){u=new Date,s=null,o=e.apply(r,i)};return function(){var f=new Date;!u&&n===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0?(clearTimeout(s),s=null,u=f,o=e.apply(r,i)):s||(s=setTimeout(a,l)),o}},x.debounce=function(e,t,n){var r,i;return function(){var s=this,o=arguments,u=function(){r=null,n||(i=e.apply(s,o))},a=n&&!r;return clearTimeout(r),r=setTimeout(u,t),a&&(i=e.apply(s,o)),i}},x.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}},x.wrap=function(e,t){return function(){var n=[e];return o.apply(n,arguments),t.apply(this,n)}},x.compose=function(){var e=arguments;return function(){var t=arguments;for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},x.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},x.keys=E||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)x.has(e,n)&&t.push(n);return t},x.values=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push(e[n]);return t},x.pairs=function(e){var t=[];for(var n in e)x.has(e,n)&&t.push([n,e[n]]);return t},x.invert=function(e){var t={};for(var n in e)x.has(e,n)&&(t[e[n]]=n);return t},x.functions=x.methods=function(e){var t=[];for(var n in e)x.isFunction(e[n])&&t.push(n);return t.sort()},x.extend=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e},x.pick=function(e){var t={},n=a.apply(r,u.call(arguments,1));return T(n,function(n){n in e&&(t[n]=e[n])}),t},x.omit=function(e){var t={},n=a.apply(r,u.call(arguments,1));for(var i in e)x.contains(n,i)||(t[i]=e[i]);return t},x.defaults=function(e){return T(u.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e},x.clone=function(e){return x.isObject(e)?x.isArray(e)?e.slice():x.extend({},e):e},x.tap=function(e,t){return t(e),e};var M=function(e,t,n,r){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return e===t;e instanceof x&&(e=e._wrapped),t instanceof x&&(t=t._wrapped);var i=f.call(e);if(i!=f.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(typeof e!="object"||typeof t!="object")return!1;var s=n.length;while(s--)if(n[s]==e)return r[s]==t;n.push(e),r.push(t);var o=0,u=!0;if(i=="[object Array]"){o=e.length,u=o==t.length;if(u)while(o--)if(!(u=M(e[o],t[o],n,r)))break}else{var a=e.constructor,l=t.constructor;if(a!==l&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(l)&&l instanceof l))return!1;for(var c in e)if(x.has(e,c)){o++;if(!(u=x.has(t,c)&&M(e[c],t[c],n,r)))break}if(u){for(c in t)if(x.has(t,c)&&!(o--))break;u=!o}}return n.pop(),r.pop(),u};x.isEqual=function(e,t){return M(e,t,[],[])},x.isEmpty=function(e){if(e==null)return!0;if(x.isArray(e)||x.isString(e))return e.length===0;for(var t in e)if(x.has(e,t))return!1;return!0},x.isElement=function(e){return!!e&&e.nodeType===1},x.isArray=w||function(e){return f.call(e)=="[object Array]"},x.isObject=function(e){return e===Object(e)},T(["Arguments","Function","String","Number","Date","RegExp"],function(e){x["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}}),x.isArguments(arguments)||(x.isArguments=function(e){return!!e&&!!x.has(e,"callee")}),typeof /./!="function"&&(x.isFunction=function(e){return typeof e=="function"}),x.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},x.isNaN=function(e){return x.isNumber(e)&&e!=+e},x.isBoolean=function(e){return e===!0||e===!1||f.call(e)=="[object Boolean]"},x.isNull=function(e){return e===null},x.isUndefined=function(e){return e===void 0},x.has=function(e,t){return l.call(e,t)},x.noConflict=function(){return e._=t,this},x.identity=function(e){return e},x.times=function(e,t,n){var r=Array(e);for(var i=0;i<e;i++)r[i]=t.call(n,i);return r},x.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var _={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};_.unescape=x.invert(_.escape);var D={escape:new RegExp("["+x.keys(_.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(_.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(e){x[e]=function(t){return t==null?"":(""+t).replace(D[e],function(t){return _[e][t]})}}),x.result=function(e,t){if(e==null)return void 0;var n=e[t];return x.isFunction(n)?n.call(e):n},x.mixin=function(e){T(x.functions(e),function(t){var n=x[t]=e[t];x.prototype[t]=function(){var e=[this._wrapped];return o.apply(e,arguments),F.call(this,n.apply(x,e))}})};var P=0;x.uniqueId=function(e){var t=++P+"";return e?e+t:t},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var H=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},j=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(e,t,n){var r;n=x.defaults({},n,x.templateSettings);var i=new RegExp([(n.escape||H).source,(n.interpolate||H).source,(n.evaluate||H).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(j,function(e){return"\\"+B[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,x);var a=function(e){return r.call(this,e,x)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},x.chain=function(e){return x(e).chain()};var F=function(e){return this._chain?x(e).chain():e};x.mixin(x),T(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];x.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],F.call(this,n)}}),T(["concat","join","slice"],function(e){var t=r[e];x.prototype[e]=function(){return F.call(this,t.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}.call(this),define("libs/underscore",function(e){return function(){var t,n;return t||e._}}(this)),define("utils/utils",["libs/underscore"],function(e){function t(e,t,r){n("GET",e,{},t,r)}function n(e,t,n,r,i){if(e=="GET"||e=="DELETE")t.indexOf("?")==-1?t+="?":t+="&",t+=$.param(n);var s=new XMLHttpRequest;s.open(e,t,!0),s.setRequestHeader("Accept","application/json"),s.setRequestHeader("Cache-Control","no-cache"),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.setRequestHeader("Content-Type","application/json"),s.onloadend=function(){var e=s.status;try{response=jQuery.parseJSON(s.responseText)}catch(t){response=s.responseText}e==200?r&&r(response):i&&i(response)},e=="GET"||e=="DELETE"?s.send():s.send(JSON.stringify(n))}function r(e,t){var n=$('<div class="'+e+'"></div>');n.appendTo(":eq(0)");var r=n.css(t);return n.remove(),r}function i(e){$('link[href^="'+e+'"]').length||$('<link href="'+galaxy_config.root+e+'" rel="stylesheet">').appendTo("head")}function s(t,n){return t?e.defaults(t,n):n}function o(e,t){var n="";if(e>=1e11)e/=1e11,n="TB";else if(e>=1e8)e/=1e8,n="GB";else if(e>=1e5)e/=1e5,n="MB";else if(e>=100)e/=100,n="KB";else{if(!(e>0))return"<strong>-</strong>";e*=10,n="b"}var r=Math.round(e)/10;return t?r+" "+n:"<strong>"+r+"</strong> "+n}function u(){return(new Date).getTime().toString(36)}function a(e){var t=$("<p></p>");return t.append(e),t}function f(){var e=new Date,t=(e.getHours()<10?"0":"")+e.getHours(),n=(e.getMinutes()<10?"0":"")+e.getMinutes(),r=e.getDate()+"/"+(e.getMonth()+1)+"/"+e.getFullYear()+", "+t+":"+n;return r}return{cssLoadFile:i,cssGetAttribute:r,get:t,merge:s,bytesToString:o,uuid:u,time:f,wrap:a,request:n}}),define("mvc/ui/ui-portlet",["utils/utils"],function(e){var t=Backbone.View.extend({visible:!1,optionsDefault:{title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom"},$title:null,$content:null,$buttons:null,$operations:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.$content=this.$el.find("#content"),this.$title=this.$el.find("#portlet-header-text");var n=this.$el.find("#portlet-content");this.options.scrollable?n.addClass("scroll"):this.options.title?n.addClass("no-scroll"):n.addClass("no-scroll-no-title"),this.options.nopadding&&(n.css("padding","0px"),this.$content.css("padding","0px")),this.$buttons=$(this.el).find("#buttons");if(this.options.buttons){var r=this;$.each(this.options.buttons,function(e,t){t.$el.prop("id",e),r.$buttons.append(t.$el)})}else this.$buttons.remove();this.$operations=$(this.el).find("#operations");if(this.options.operations){var r=this;$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$operations.append(t.$el)})}this.options.body&&this.append(this.options.body)},append:function(t){this.$content.append(e.wrap(t))},content:function(){return this.$content},show:function(){this.$el.fadeIn("fast"),this.visible=!0},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},enableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!1)},disableButton:function(e){this.$buttons.find("#"+e).prop("disabled",!0)},hideOperation:function(e){this.$operations.find("#"+e).hide()},showOperation:function(e){this.$operations.find("#"+e).show()},setOperation:function(e,t){var n=this.$operations.find("#"+e);n.off("click"),n.on("click",t)},title:function(e){var t=this.$title;return e&&t.html(e),t.html()},_template:function(e){var t='<div class="ui-portlet">';return e.title&&(t+='<div id="portlet-header" class="portlet-header"><div id="operations" style="float: right;"></div><h3>',e.icon&&(t+='<i class="icon fa '+e.icon+'"> </i>'),t+='<span id="portlet-header-text">'+e.title+"</span>"+"</h3>"+"</div>"),t+='<div id="portlet-content" class="portlet-content">',e.placement=="top"&&(t+='<div id="buttons" class="buttons"></div>'),t+='<div id="content" class="content"></div>',e.placement=="bottom"&&(t+='<div id="buttons" class="buttons"></div>'),t+="</div></div>",t}});return{View:t}}),define("plugin/library/ui-select",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:!0,wait:!1},selected:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.selected=this.options.value,this.setElement(this._template(this.options)),this.$select=this.$el.find("#select"),this.$icon=this.$el.find("#icon");var n=this;this.$select.on("change",function(){n.value(n.$select.val())}),this.on("change",function(){n.options.onchange&&n.options.onchange(n.value())}),this._refresh(),this.options.visible||this.hide(),this.options.wait?this.wait():this.show()},value:function(e){var t=this.selected;e!==undefined&&(this.selected=e,this.$select.val(e));var n=this.selected;return n&&n!=t&&this.options.onchange&&this.options.onchange(n),n},first:function(){var e=this.$select.find("option");return e.length>0?e.val():undefined},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-caret-down"),this.$select.show(),this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass(),this.$icon.addClass("fa fa-spinner fa-spin"),this.$select.hide()},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",!1)},disable:function(){this.$select.prop("disabled",!0)},add:function(e){this.$select.append(this._templateOption(e)),this._refresh()},del:function(e){this.$select.find("option[value="+e+"]").remove(),this.$select.trigger("change"),this._refresh()},update:function(e){this.$select.find("option").remove();for(var t in e)this.$select.append(this._templateOption(e[t]));this._refresh()},setOnChange:function(e){this.options.onchange=e},exists:function(e){return this.$select.find("option[value="+e+"]").length>0},_refresh:function(){this.$select.find("option[value=null]").remove();var e=this.$select.find("option").length;e==0?(this.disable(),this.$select.append(this._templateOption({value:"null",label:this.options.empty}))):this.enable(),this.selected&&this.$select.val(this.selected)},_templateOption:function(e){return'<option value="'+e.value+'">'+e.label+"</option>"},_template:function(e){var t='<div id="'+e.id+'" class="ui-select">'+'<div class="button">'+'<i id="icon"/>'+"</div>"+'<select id="select" class="select '+e.cls+" "+e.id+'">';for(key in e.data){var n=e.data[key],r="";if(n.value==e.value||n.value=="")r="selected";t+='<option value="'+n.value+'" '+r+">"+n.label+"</option>"}return t+="</select></div>",t}});return{View:t}}),define("plugin/library/ui",["utils/utils","plugin/library/ui-select","mvc/ui/ui-modal"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{url:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},_template:function(e){return'<img class="ui-image '+e.cls+'" src="'+e.url+'"/>'}}),i=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options))},title:function(e){this.$el.html(e)},_template:function(e){return'<label class="ui-label '+e.cls+'">'+e.title+"</label>"},value:function(){return options.title}}),s=Backbone.View.extend({optionsDefault:{id:null,title:"","float":"right",cls:"btn btn-default",icon:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t='<button id="'+e.id+'" type="submit" style="float: '+e.float+';" type="button" class="ui-button '+e.cls+'">';return e.icon&&(t+='<i class="icon fa '+e.icon+'"></i> '),t+=e.title+"</button>",t}}),o=Backbone.View.extend({optionsDefault:{"float":"right",icon:"",tooltip:"",placement:"bottom",title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){return'<div><span class="fa '+e.icon+'" class="ui-icon"/> '+e.title+"</div>"}}),u=Backbone.View.extend({optionsDefault:{title:"",id:null,"float":"right",cls:"icon-btn",icon:"",tooltip:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick),$(this.el).tooltip({title:t.tooltip,placement:"bottom"})},_template:function(e){var t="";e.title&&(t="width: auto;");var n='<div id="'+e.id+'" style="float: '+e.float+"; "+t+'" class="ui-button-icon '+e.cls+'">';return e.title?n+='<div class="button"><i class="icon fa '+e.icon+'"/> '+'<span class="title">'+e.title+"</span>"+"</div>":n+='<i class="icon fa '+e.icon+'"/>',n+="</div>",n}}),a=Backbone.View.extend({optionsDefault:{title:"",cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),$(this.el).on("click",t.onclick)},_template:function(e){return'<div><a href="javascript:void(0)" class="ui-anchor '+e.cls+'">'+e.title+"</a></div>"}}),f=Backbone.View.extend({optionsDefault:{message:"",status:"info",persistent:!1},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement("<div></div>")},update:function(t){this.options=e.merge(t,this.optionsDefault);if(t.message!=""){this.$el.html(this._template(this.options)),this.$el.find(".alert").append(t.message),this.$el.fadeIn();if(!t.persistent){var n=this;window.setTimeout(function(){n.$el.is(":visible")?n.$el.fadeOut():n.$el.hide()},3e3)}}else this.$el.fadeOut()},_template:function(e){return'<div class="ui-message alert alert-'+e.status+'"/>'}}),l=Backbone.View.extend({optionsDefault:{onclick:null,searchword:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options));var n=this;this.options.onclick&&this.$el.on("submit",function(e){var t=n.$el.find("#search");n.options.onclick(t.val())})},_template:function(e){return'<div class="ui-search"><form onsubmit="return false;"><input id="search" class="form-control input-sm" type="text" name="search" placeholder="Search..." value="'+e.searchword+'">'+'<button type="submit" class="btn search-btn">'+'<i class="fa fa-search"></i>'+"</button>"+"</form>"+"</div>"}}),c=Backbone.View.extend({optionsDefault:{id:"",title:"",target:"",href:"",onunload:null,onclick:null,visible:!0,icon:null,tag:""},$menu:null,initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement($(this._template(this.options)));var n=$(this.el).find(".root"),r=this;n.on("click",function(e){e.preventDefault(),r.options.onclick&&r.options.onclick()}),this.options.visible||this.hide()},show:function(){$(this.el).show()},hide:function(){$(this.el).hide()},addMenu:function(t){var n={title:"",target:"",href:"",onclick:null,divider:!1,icon:null,cls:"button-menu btn-group"};n=e.merge(t,n),this.$menu||($(this.el).append(this._templateMenu()),this.$menu=$(this.el).find(".menu"));var r=$(this._templateMenuItem(n));r.on("click",function(e){e.preventDefault(),n.onclick&&n.onclick()}),this.$menu.append(r),n.divider&&this.$menu.append($(this._templateDivider()))},_templateMenuItem:function(e){var t='<li><a href="'+e.href+'" target="'+e.target+'">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),t+=" "+e.title+"</a>"+"</li>",t},_templateMenu:function(){return'<ul class="menu dropdown-menu pull-right" role="menu"></ul>'},_templateDivider:function(){return'<li class="divider"></li>'},_template:function(e){var t='<div id="'+e.id+'" class="ui-button-menu '+e.cls+'">'+'<button type="button" class="root btn btn-default dropdown-toggle" data-toggle="dropdown">';return e.icon&&(t+='<i class="fa '+e.icon+'"></i>'),"</button></div>",t}}),h=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<input id="'+e.id+'" type="'+e.type+'" value="'+e.value+'" placeholder="'+e.placeholder+'" class="ui-input '+e.cls+'">'}}),p=Backbone.View.extend({optionsDefault:{value:"",type:"text",placeholder:"",disabled:!1,visible:!0,cls:""},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.disabled&&this.$el.prop("disabled",!0),this.options.visible||this.$el.hide();var n=this;this.$el.on("input",function(){n.options.onchange&&n.options.onchange(n.$el.val())})},value:function(e){return e!==undefined&&this.$el.val(e),this.$el.val()},_template:function(e){return'<textarea id="'+e.id+'" class="ui-textarea '+e.cls+'" rows="5"></textarea>'}}),d=Backbone.View.extend({optionsDefault:{value:"",visible:!0,cls:"",data:[],id:e.uuid()},initialize:function(t){this.options=e.merge(t,this.optionsDefault),this.setElement(this._template(this.options)),this.options.visible||this.$el.hide(),this.options.value&&this.value(this.options.value),this.current=this.options.value;var n=this;this.$el.find("input").on("change",function(){n.value(n._getValue())})},value:function(e){var t=this.current;e!==undefined&&(this.$el.find("label").removeClass("active"),this.$el.find('[value="'+e+'"]').closest("label").addClass("active"),this.current=e);var n=this.current;return n!=t&&this.options.onchange&&this.options.onchange(this.current),this.current},_getValue:function(){var e=this.$el.find(":checked"),t=null;return e.length>0&&(t=e.val()),t},_template:function(e){var t='<div class="btn-group ui-radiobutton" data-toggle="buttons">';for(key in e.data){var n=e.data[key];t+='<label class="btn btn-default"><input type="radio" name="'+e.id+'" value="'+n.value+'" selected>'+n.label+"</label>"}return t+="</div>",t}});return{Label:i,Button:s,Icon:o,ButtonIcon:u,Input:h,Anchor:a,Message:f,Searchbox:l,Select:t,ButtonMenu:c,Modal:n,Textarea:p,Image:r,RadioButton:d}}),define("plugin/library/jobs",["utils/utils"],function(e){return Backbone.Model.extend({initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n,r,i){var s=this;e.state("wait","Requesting job results...");var o=e.get("dataset_id_job");o!=""?s._wait(e,r,i):s._submit(e,t,n,r,i)},cleanup:function(t){var n=this,r=t.get("dataset_id_job");r!=""&&(e.request("PUT",config.root+"api/histories/none/contents/"+r,{deleted:!0},function(){n._refreshHdas()}),t.set("dataset_id_job",""))},_submit:function(t,n,r,i,s){var o=this,u=t.id,a=t.get("type"),f=t.definition;data={tool_id:"charts",inputs:{input:{id:t.get("dataset_id"),src:"hda"},module:f.execute,columns:r,settings:n}},t.state("wait","Sending job request..."),e.request("POST",config.root+"api/tools",data,function(e){if(!e.outputs||e.outputs.length==0)t.state("failed","Job submission failed. No response."),s&&s();else{o._refreshHdas();var n=e.outputs[0];t.state("wait","Your job has been queued. You may close the browser window. The job will run in the background."),t.set("dataset_id_job",n.id),this.app.storage.save(),o._wait(t,i,s)}},function(e){var n="";e&&e.message&&e.message.data&&e.message.data.input&&(n=e.message.data.input+"."),t.state("failed","This visualization requires the 'charts' tool. Please make sure it is installed. "+n),s&&s()})},_wait:function(t,n,r){var i=this;e.request("GET",config.root+"api/datasets/"+t.get("dataset_id_job"),{},function(e){var s=!1;switch(e.state){case"ok":t.state("wait","Job completed successfully..."),n&&n(e),s=!0;break;case"error":t.state("failed","Job has failed. Please check the history for details."),r&&r(e),s=!0;break;case"running":t.state("wait","Your job is running. You may close the browser window. The job will continue in the background.")}s||setTimeout(function(){i._wait(t,n,r)},i.app.config.get("query_timeout"))})},_refreshHdas:function(){Galaxy&&Galaxy.currHistoryPanel&&Galaxy.currHistoryPanel.refreshContents()}})}),define("plugin/library/datasets",["utils/utils"],function(e){return Backbone.Collection.extend({list:{},cache:{},initialize:function(t,n){this.app=t,this.options=e.merge(n,this.optionsDefault)},request:function(e,t,n){var r=this;e.groups?this._get_dataset(e.id,function(){r._get(e,t)}):this._get_dataset(e.id,t,n)},_get_dataset:function(t,n,r){var i=this.list[t];if(i){n(i);return}var s=this;e.request("GET",config.root+"api/datasets/"+t,{},function(e){switch(e.state){case"error":r&&r(e);break;default:s.list[t]=e,n(e)}})},_block_id:function(e,t){return e.id+"_"+e.start+"_"+e.end+"_"+t},_get:function(e,t){e.start||(e.start=0),e.end||(e.end=this.app.config.get("query_limit"));var n=[],r={},i=0;for(var s in e.groups){var o=e.groups[s];for(var u in o.columns){var a=o.columns[u].index,f=this._block_id(e,a);if(this.cache[f]||a==="auto")continue;!r[a]&&a!==undefined&&(r[a]=i,n.push(a),i++)}}if(n.length==0){this._fill_from_cache(e),t(e);return}var l={dataset_id:e.id,start:e.start,end:e.end,columns:n},c=this;this._fetch(l,function(r){for(var i in r){var s=n[i],o=c._block_id(e,s);c.cache[o]=r[i]}c._fill_from_cache(e),t(e)})},_fill_from_cache:function(e){console.debug("Datasets::_fill_from_cache() - Filling request from cache.");var t=e.start,n=0;for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s],u=this._block_id(e,o.index),a=this.cache[u];a&&(n=Math.max(n,a.length))}}n==0&&console.debug("FAILED - Datasets::_fill_from_cache() - Invalid range.");for(var r in e.groups){var i=e.groups[r];i.values=[];for(var f=0;f<n;f++)i.values[f]={x:parseInt(f)+t}}for(var r in e.groups){var i=e.groups[r];for(var s in i.columns){var o=i.columns[s];if(o.index=="auto")for(var f=0;f<n;f++){var l=i.values[f];l[s]=parseInt(f)+t}else{var u=this._block_id(e,o.index),a=this.cache[u];for(var f=0;f<n;f++){var l=i.values[f],c=a[f];isNaN(c)&&!o.is_label&&(c=0),l[s]=c}}}}},_fetch:function(t,n){var r=t.start?t.start:0,i=Math.abs(t.end-t.start),s=this.app.config.get("query_limit");if(!i||i>s)i=s;var o=0;t.columns&&(o=t.columns.length,console.debug("Datasets::_fetch() - Fetching "+o+" column(s)")),o==0&&console.debug("Datasets::_fetch() - No columns requested");var u="";for(var a in t.columns)u+=t.columns[a]+",";u=u.substring(0,u.length-1);var f=this;e.request("GET",config.root+"api/datasets/"+t.dataset_id,{data_type:"raw_data",provider:"dataset-column",limit:i,offset:r,indeces:u},function(e){var t=new Array(o);for(var r=0;r<o;r++)t[r]=[];for(var r in e.data){var i=e.data[r];for(var s in i){var u=i[s];u!==undefined&&u!=2147483647&&t[s].push(u)}}console.debug("Datasets::_fetch() - Fetching complete."),n(t)})}})}),define("plugin/models/group",[],function(){return Backbone.Model.extend({defaults:{key:"Data label",date:""},reset:function(){this.clear({silent:!0}).set(this.defaults),this.trigger("reset",this)}})}),define("plugin/models/groups",["plugin/models/group"],function(e){return Backbone.Collection.extend({model:e})}),define("plugin/library/deferred",["utils/utils"],function(e){return Backbone.Model.extend({queue:[],process:{},counter:0,initialize:function(){this.on("refresh",function(){for(var e in this.queue)if(this.counter==0){var t=this.queue[e];this.queue.splice(e,1),t()}})},execute:function(e){this.queue.push(e),this.trigger("refresh")},register:function(){var t=e.uuid();return this.process[t]=!0,this.counter++,console.debug("Deferred:register() - Registering "+t),t},done:function(e){this.process[e]&&(delete this.process[e],this.counter--,console.debug("Deferred:done() - Unregistering "+e),this.trigger("refresh"))},ready:function(){return this.counter==0}})});var Visualization=Backbone.Model.extend({defaults:{config:{}},urlRoot:function(){var e="/api/visualizations";return window.galaxy_config&&galaxy_config.root?galaxy_config.root+e:e},initialize:function(e){_.isObject(e.config)&&_.isObject(this.defaults.config)&&_.defaults(e.config,this.defaults.config),this._setUpListeners()},_setUpListeners:function(){},set:function(e,t){if(e==="config"){var n=this.get("config");_.isObject(n)&&(t=_.extend(_.clone(n),t))}return Backbone.Model.prototype.set.call(this,e,t),this},toString:function(){var e=this.get("id")||"";return this.get("title")&&(e+=":"+this.get("title")),"Visualization("+e+")"}}),VisualizationCollection=Backbone.Collection.extend({model:Visualization,url:function(){return galaxy_config.root+"api/visualizations"},initialize:function(e,t){t=t||{}},set:function(e,t){var n=this;e=_.map(e,function(e){var t=n.get(e.id);if(!t)return e;var r=t.toJSON();return _.extend(r,e),r}),Backbone.Collection.prototype.set.call(this,e,t)},toString:function(){return["VisualizationCollection(",[this.historyId,this.length].join(),")"].join("")}});define("mvc/visualization/visualization-model",function(){}),define("plugin/models/chart",["plugin/models/groups","plugin/library/deferred","mvc/visualization/visualization-model"],function(e,t){return Backbone.Model.extend({defaults:{id:null,title:"",type:"",date:null,state:"",state_info:"",modified:!1,dataset_id:"",dataset_id_job:""},initialize:function(n){this.groups=new e,this.settings=new Backbone.Model,this.deferred=new t},reset:function(){this.clear({silent:!0}).set(this.defaults),this.groups.reset(),this.settings.clear(),this.trigger("reset",this)},copy:function(e){var t=this;t.clear({silent:!0}).set(this.defaults),t.set(e.attributes),t.settings=e.settings.clone(),t.groups.reset(),e.groups.each(function(e){t.groups.add(e.clone())}),t.trigger("change",t)},state:function(e,t){this.set("state",e),this.set("state_info",t),this.trigger("set:state"),console.debug("Chart:state() - "+t+" ("+e+")")}})}),define("plugin/library/storage",["utils/utils","plugin/models/chart","plugin/models/group"],function(e,t,n){return Backbone.Model.extend({vis:null,initialize:function(e){this.app=e,this.chart=this.app.chart,this.options=this.app.options,this.id=this.options.id,this.vis=new Visualization({type:"charts",config:{dataset_id:this.options.config.dataset_id,chart_dict:{}}}),this.id&&(this.vis.id=this.id);var t=this.options.config.chart_dict;t&&(this.vis.get("config").chart_dict=t)},save:function(){var e=this.app.chart;this.vis.get("config").chart_dict={};var t=e.get("title");t!=""&&this.vis.set("title",t);var n={attributes:e.attributes,settings:e.settings.attributes,groups:[]};e.groups.each(function(e){n.groups.push(e.attributes)}),this.vis.get("config").chart_dict=n;var r=this;this.vis.save().fail(function(e,t,n){console.error(e,t,n)}).then(function(e){e&&e.id&&(r.id=e.id)})},load:function(){var e=this.vis.get("config").chart_dict;if(!e.attributes)return!1;var t=e.attributes.type;if(!t)return console.debug("Storage::load() - Chart type not provided. Invalid format."),!1;var r=this.app.types.get(t);if(!r)return console.debug("Storage::load() - Chart type not supported. Please re-configure the chart. Resetting chart."),!1;console.debug("Storage::load() - Loading chart type "+t+"."),this.chart.definition=r,this.chart.set(e.attributes),this.chart.state("ok","Loading saved visualization..."),this.chart.settings.set(e.settings);for(var i in e.groups)this.chart.groups.add(new n(e.groups[i]));return this.chart.set("modified",!1),!0}})}),define("plugin/library/screenshot",["libs/underscore"],function(e){function t(e,t,i){e.find("svg").length>0?r(e,t,i):n(e)}function n(e){e.find("#canvas").jqplotSaveImage({})}function r(e,t,n){var r=new XMLSerializer,o="",u=this,a=0,f=0;return e.find("svg").each(function(){var e=$(this);i(e),a=parseInt(e.css("height")),f=parseInt(e.css("width")),e.attr({version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:f,height:a}),e.find(".highcharts-button").hide(),o+=r.serializeToString(this),e.find(".highcharts-button").show()}),s(e,t,{filename:n||"chart",type:"application/pdf",height:a,width:f,scale:2,svg:o}),o}function i(e){for(var t in document.styleSheets){var n=document.styleSheets[t],r=n.cssRules;if(r)for(var i=0,s=r.length;i<s;i++)try{e.find(r[i].selectorText).each(function(e,t){t.style.cssText+=r[i].style.cssText})}catch(o){}}}function s(e,t,n){var r=e.find("#viewport-form");r.length===0&&(r=$("<form>",{id:"viewport-form",method:"post",action:t,display:"none"}),e.append(r)),r.empty();for(name in n){var i=$("<input/>",{type:"hidden",name:name,value:n[name]});r.append(i)}try{r.submit()}catch(s){console.log(s)}}return{create:t}}),define("plugin/views/viewport",["mvc/ui/ui-portlet","plugin/library/ui","plugin/library/screenshot","utils/utils"],function(e,t,n,r){return Backbone.View.extend({container_list:[],canvas_list:[],initialize:function(e,t){this.app=e,this.chart=this.app.chart,this.options=r.merge(t,this.optionsDefault),this.setElement($(this._template())),this._fullscreen(this.$el,100),this._createContainer("div");var n=this;this.chart.on("redraw",function(){n._draw(n.chart)}),this.chart.on("set:state",function(){var e=n.$el.find("#info"),t=n.$el.find(".charts-viewport-container"),r=e.find("#icon");r.removeClass(),e.show(),e.find("#text").html(n.chart.get("state_info"));var i=n.chart.get("state");switch(i){case"ok":e.hide(),t.show();break;case"failed":r.addClass("icon fa fa-warning"),t.hide();break;default:r.addClass("icon fa fa-spinner fa-spin"),t.show()}})},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_fullscreen:function(e,t){e.css("height",$(window).height()-t),$(window).resize(function(){e.css("height",$(window).height()-t)})},_createContainer:function(e,t){t=t||1;for(var n in this.container_list)this.container_list[n].remove();this.container_list=[],this.canvas_list=[];for(var n=0;n<t;n++){var r=$(this._templateContainer(e,parseInt(100/t)));this.$el.append(r),this.container_list[n]=r,e=="svg"?this.canvas_list[n]=d3.select(r.find("#canvas")[0]):this.canvas_list[n]=r.find("#canvas")}},_draw:function(e){var t=this,n=e.deferred.register(),r=e.get("type");this.chart_definition=e.definition;var i=this.chart_definition.use_panels||e.settings.get("use_panels")==="true",s=1;i&&(s=e.groups.length),this._createContainer(this.chart_definition.tag,s),e.state("wait","Please wait...");if(!this.chart_definition.execute||this.chart_definition.execute&&e.get("modified"))this.app.jobs.cleanup(e),e.set("modified",!1);var t=this;require(["plugin/charts/"+this.app.chartPath(r)+"/wrapper"],function(r){var i=new r(t.app,{canvas:t.canvas_list});t.chart_definition.execute?t.app.jobs.request(e,t._defaultSettingsString(e),t._defaultRequestString(e),function(){i.draw(n,e,t._defaultRequestDictionary(e))},function(){e.deferred.done(n)}):i.draw(n,e,t._defaultRequestDictionary(e))})},_defaultRequestString:function(e){var t="",n=0,r=this;return e.groups.each(function(e){n++;for(var i in r.chart_definition.columns)t+=i+"_"+n+":"+(parseInt(e.get(i))+1)+", "}),t.substring(0,t.length-2)},_defaultSettingsString:function(e){var t="";for(key in e.settings.attributes)t+=key+":"+e.settings.get(key)+", ";return t.substring(0,t.length-2)},_defaultRequestDictionary:function(e){var t={groups:[]};this.chart_definition.execute?t.id=e.get("dataset_id_job"):t.id=e.get("dataset_id");var n=0,i=this;return e.groups.each(function(e){var s={};for(var o in i.chart_definition.columns){var u=i.chart_definition.columns[o];s[o]=r.merge({index:e.get(o)},u)}t.groups.push({key:++n+":"+e.get("key"),columns:s})}),t},_template:function(){return'<div class="charts-viewport"><div id="info" class="info"><span id="icon" class="icon" /><span id="text" class="text" /></div></div>'},_templateContainer:function(e,t){return'<div class="charts-viewport-container" style="width:'+t+'%;">'+'<div id="menu"/>'+"<"+e+' id="canvas" class="charts-viewport-canvas">'+"</div>"}})}),define("plugin/views/viewer",["utils/utils","plugin/library/ui","mvc/ui/ui-portlet","plugin/models/group","plugin/views/viewport","plugin/library/screenshot"],function(e,t,n,r,i,s){return Backbone.View.extend({initialize:function(e,r){this.app=e,this.chart=this.app.chart,this.viewport_view=new i(e);var o=this;this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Viewport",scrollable:!1,operations:{edit_button:new t.ButtonIcon({icon:"fa-edit",tooltip:"Customize this chart",title:"Editor",onclick:function(){o._wait(o.chart,function(){o.app.go("editor")})}}),picture_button:new t.ButtonIcon({icon:"fa-camera",tooltip:"SVGs are converted to PDF via "+o.app.config.get("screenshot_url")+" and CANVAS-based charts to PNG-files.",title:"Screenshot",onclick:function(){o._wait(o.chart,function(){s.create(o.viewport_view.$el,o.app.config.get("screenshot_url"),o.chart.get("title"))})}})}}),this.portlet.append(this.message.$el),this.portlet.append(this.viewport_view.$el),this.setElement(this.portlet.$el);var o=this;this.chart.on("change:title",function(){o._refreshTitle()})},show:function(){this.$el.show(),$(window).trigger("resize")},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e)},_wait:function(e,t){e.deferred.ready()?t():this.message.update({message:"Your chart is currently being processed. Please wait and try again."})}})}),define("mvc/ui/ui-tabs",["utils/utils"],function(e){var t=Backbone.View.extend({optionsDefault:{title_new:"",operations:null,onnew:null},initialize:function(t){this.visible=!1,this.$nav=null,this.$content=null,this.first_tab=null,this.options=e.merge(t,this.optionsDefault);var n=$(this._template(this.options));this.$nav=n.find(".tab-navigation"),this.$content=n.find(".tab-content"),this.setElement(n),this.list={};var r=this;this.options.operations&&$.each(this.options.operations,function(e,t){t.$el.prop("id",e),r.$nav.find(".operations").append(t.$el)});if(this.options.onnew){var i=$(this._template_tab_new(this.options));this.$nav.append(i),i.tooltip({title:"Add a new tab",placement:"bottom",container:r.$el}),i.on("click",function(e){i.tooltip("hide"),r.options.onnew()})}},add:function(e){var t=this,n=e.id,r=$(this._template_tab(e)),i=$(this._template_tab_content(e));this.list[n]=e.ondel?!0:!1,this.options.onnew?this.$nav.find("#new-tab").before(r):this.$nav.append(r),i.append(e.$el),this.$content.append(i),_.size(this.list)==1&&(r.addClass("active"),i.addClass("active"),this.first_tab=n);if(e.ondel){var s=r.find("#delete");s.tooltip({title:"Delete this tab",placement:"bottom",container:t.$el}),s.on("click",function(){return s.tooltip("destroy"),t.$el.find(".tooltip").remove(),e.ondel(),!1})}r.on("click",function(r){r.preventDefault(),e.onclick?e.onclick():t.show(n)})},del:function(e){this.$el.find("#tab-"+e).remove(),this.$el.find("#tab-content-"+e).remove(),this.first_tab==e&&(this.first_tab=null),this.first_tab!=null&&this.show(this.first_tab)},delRemovable:function(){for(var e in this.list)this.list[e]&&this.del(e)},show:function(e){this.$el.fadeIn("fast"),this.visible=!0,e&&(this.$el.find(".tab-element").removeClass("active"),this.$el.find(".tab-pane").removeClass("active"),this.$el.find("#tab-"+e).addClass("active"),this.$el.find("#tab-content-"+e).addClass("active"))},hide:function(){this.$el.fadeOut("fast"),this.visible=!1},hideOperation:function(e){this.$nav.find("#"+e).hide()},showOperation:function(e){this.$nav.find("#"+e).show()},setOperation:function(e,t){var n=this.$nav.find("#"+e);n.off("click"),n.on("click",t)},title:function(e,t){var n=this.$el.find("#tab-title-text-"+e);return t&&n.html(t),n.html()},_template:function(e){return'<div class="ui-tabs tabbable tabs-left"><ul id="tab-navigation" class="tab-navigation nav nav-tabs"><div class="operations" style="float: right; margin-bottom: 4px;"></div></ul><div id="tab-content" class="tab-content"/></div>'},_template_tab_new:function(e){return'<li id="new-tab"><a href="javascript:void(0);"><i class="ui-tabs-add fa fa-plus-circle"/>'+e.title_new+"</a>"+"</li>"},_template_tab:function(e){var t='<li id="tab-'+e.id+'" class="tab-element">'+'<a id="tab-title-link-'+e.id+'" title="" href="#tab-content-'+e.id+'" data-original-title="">'+'<span id="tab-title-text-'+e.id+'">'+e.title+"</span>";return e.ondel&&(t+='<i id="delete" class="ui-tabs-delete fa fa-minus-circle"/>'),t+="</a></li>",t},_template_tab_content:function(e){return'<div id="tab-content-'+e.id+'" class="tab-pane"/>'}});return{View:t}}),define("plugin/library/ui-table",["utils/utils"],function(e){var t=Backbone.View.extend({row:null,row_count:0,optionsDefault:{content:"No content available.",onchange:null,ondblclick:null,onconfirm:null,cls:""},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(t){this.options=e.merge(t,this.optionsDefault);var n=$(this._template(t));this.$thead=n.find("thead"),this.$tbody=n.find("tbody"),this.$tmessage=n.find("tmessage"),this.setElement(n),this.row=$("<tr></tr>")},addHeader:function(e){var t=$("<th></th>");t.append(e),this.row.append(t)},appendHeader:function(){this.$thead.append(this.row),this.row=$("<tr></tr>")},add:function(e,t,n){var r=$("<td></td>");t&&r.css("width",t),n&&r.css("text-align",n),r.append(e),this.row.append(r)},append:function(e){this._commit(e)},prepend:function(e){this._commit(e,!0)},get:function(e){return this.$el.find("#"+e)},del:function(e){var t=this.$tbody.find("#"+e);t.length>0&&(t.remove(),this.row_count--,this._refresh())},delAll:function(){this.$tbody.html(""),this.row_count=0,this._refresh()},value:function(e){this.before=this.$tbody.find(".current").attr("id"),e!==undefined&&(this.$tbody.find("tr").removeClass("current"),e&&this.$tbody.find("#"+e).addClass("current"));var t=this.$tbody.find(".current").attr("id");return t===undefined?null:(t!=this.before&&this.options.onchange&&this.options.onchange(e),t)},size:function(){return this.$tbody.find("tr").length},_commit:function(e,t){this.del(e),this.row.attr("id",e),t?this.$tbody.prepend(this.row):this.$tbody.append(this.row),this.row=$("<tr></tr>"),this.row_count++,this._refresh()},_onclick:function(e){var t=this.value(),n=$(e.target).closest("tr").attr("id");n!=""&&n&&t!=n&&(this.options.onconfirm?this.options.onconfirm(n):this.value(n))},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_refresh:function(){this.row_count==0?this.$tmessage.show():this.$tmessage.hide()},_template:function(e){return'<div><table class="ui-table '+e.cls+'">'+"<thead></thead>"+'<tbody style="cursor: pointer;"></tbody>'+"</table>"+"<tmessage>"+e.content+"</tmessage>"+"<div>"}});return{View:t}}),define("plugin/views/group",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(r,i){this.app=r;var s=this;this.chart=this.app.chart,this.group=i.group,this.group_key=new t.Input({placeholder:"Data label",onchange:function(e){s.group.set("key",e)}}),this.table=new e.View({content:"No data column."});var o=$("<div/>");o.append(n.wrap((new t.Label({title:"Provide a label:"})).$el)),o.append(n.wrap(this.group_key.$el)),o.append(n.wrap((new t.Label({title:"Select columns:"})).$el)),o.append(n.wrap(this.table.$el)),this.setElement(o);var s=this;this.chart.on("change:dataset_id",function(){s._refreshTable()}),this.chart.on("change:type",function(){s._refreshTable()}),this.group.on("change:key",function(){s._refreshGroupKey()}),this.group.on("change",function(){s._refreshGroup()}),this._refreshTable(),this._refreshGroupKey(),this._refreshGroup()},_refreshTable:function(){var e=this.chart.get("dataset_id"),n=this.chart.get("type");if(!e||!n)return;var r=this,i=this.chart.definition;this.table.delAll();var s={};for(var o in i.columns){var u=i.columns[o];if(!u){console.debug("Group::_refreshTable() - Skipping column definition.");continue}var a=new t.Select.View({id:"select_"+o,wait:!0});this.table.add(u.title,"25%"),this.table.add(a.$el),this.table.append(o),s[o]=a}this.chart.state("wait","Loading metadata...");var f=this.chart.deferred.register();this.app.datasets.request({id:e},function(e){for(var t in s)r._addRow(t,e,s,i.columns[t]);r.chart.state("ok","Metadata initialized..."),r.chart.deferred.done(f)})},_addRow:function(e,t,n,r){var i=this,s=r.is_label,o=r.is_auto,u=r.is_numeric,a=[],f=n[e];o&&a.push({label:"Column: Row Number",value:"auto"});var l=t.metadata_column_types;for(var c in l){var h=!1;l[c]=="int"||l[c]=="float"?h=u:h=s,h&&a.push({label:"Column: "+(parseInt(c)+1)+" ["+l[c]+"]",value:c})}f.update(a);if(!f.exists(this.group.get(e))){var p=f.first();console.debug('Group()::_addRow() - Switching model value from "'+this.group.get(e)+'" to "'+p+'".'),this.group.set(e,p)}f.value(this.group.get(e)),f.setOnChange(function(t){i.group.set(e,t),i.chart.set("modified",!0)}),f.show()},_refreshGroup:function(){this.group.set("date",n.time())},_refreshGroupKey:function(){var e=this.group.get("key");e===undefined&&(e=""),this.group_key.value(e)}})}),define("plugin/library/ui-table-form",["plugin/library/ui-table","plugin/library/ui","utils/utils"],function(e,t,n){var r=Backbone.View.extend({optionsDefault:{title:"",content:"",mode:""},list:[],initialize:function(r,i){this.app=r,this.options=n.merge(i,this.optionsDefault),this.table_title=new t.Label({title:this.options.title}),this.table=new e.View({content:this.options.content});var s=$('<div class="ui-table-form"/>');this.options.title&&s.append(n.wrap(this.table_title.$el)),s.append(n.wrap(this.table.$el)),this.setElement(s)},title:function(e){this.table_title.title(e)},update:function(e,t){this.table.delAll(),this.list=[];for(var n in e)this._add(e[n].id||n,e[n],t);for(var n in this.list)this.list[n].trigger("change")},_add:function(e,n,r){var i=this,s=null,o=n.type;switch(o){case"text":s=new t.Input({id:"field-"+e,placeholder:n.placeholder,value:r.get(e),onchange:function(t){r.set(e,t)}});break;case"radiobutton":s=new t.RadioButton({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"select":s=new t.Select.View({id:"field-"+e,data:n.data,value:r.get(e),onchange:function(t){r.set(e,t);var s=_.findWhere(n.data,{value:t});if(s){for(var o in s.show){var u=s.show[o];i.table.get(u).show()}for(var o in s.hide){var u=s.hide[o];i.table.get(u).hide()}}}});break;case"dataset":s=new t.Select.View({id:"field-"+e,onchange:function(t){r.set(e,t)}}),i.app.datasets.on("all",function(){var t=[];i.app.datasets.each(function(e){e.get("datatype_id")==n.data&&t.push({value:e.get("id"),label:e.get("name")})}),s.update(t),r.get(e)||r.set(e,s.first()),s.value(r.get(e))}),i.app.datasets.trigger("all.datasets");break;case"textarea":s=new t.Textarea({id:"field-"+e,onchange:function(){r.set(e,s.value())}});break;case"separator":s=$("<div/>");break;default:s=new t.Input({id:"field-"+e,placeholder:n.placeholder,type:n.type,onchange:function(){r.set(e,s.value())}})}if(o!="separator"){r.get(e)||r.set(e,n.init),s.value(r.get(e)),this.list[e]=s;var u=$("<div/>");u.append(s.$el),n.info&&u.append('<div class="ui-table-form-info">'+n.info+"</div>"),this.options.style=="bold"?(this.table.add((new t.Label({title:n.title,cls:"form-label"})).$el),this.table.add(u)):(this.table.add('<span class="ui-table-form-title">'+n.title+"</span>","25%"),this.table.add(u))}else this.table.add('<div class="ui-table-form-separator">'+n.title+":<div/>"),this.table.add($("<div/>"));this.table.append(e)}});return{View:r}}),define("plugin/views/settings",["plugin/library/ui","plugin/library/ui-table-form","utils/utils"],function(e,t,n){return Backbone.View.extend({initialize:function(e,n){this.app=e;var r=this;this.chart=this.app.chart,this.form=new t.View({title:"Chart options:",content:"This chart type does not provide any options."}),this.setElement(this.form.$el);var r=this;this.chart.on("change",function(){r._refresh()})},_refresh:function(){var e=this.chart.definition;if(!e)return;this.form.title(e.category+" - "+e.title+":"),this.form.update(e.settings,this.chart.settings)}})}),define("plugin/views/types",["utils/utils","plugin/library/ui"],function(e,t){return Backbone.View.extend({optionsDefault:{onchange:null,ondblclick:null},events:{click:"_onclick",dblclick:"_ondblclick"},initialize:function(n,r){var i=this;this.app=n,this.options=e.merge(r,this.optionsDefault);var s=$('<div class="charts-grid"/>');s.append(e.wrap((new t.Label({title:"How many data points would you like to analyze?"})).$el)),this.library=new t.RadioButton({data:[{label:"Few (<1k)",value:"small"},{label:"Some (<10k)",value:"medium"},{label:"Many (>10k)",value:"large"}],onchange:function(e){i._filter(e)}}),s.append(e.wrap(this.library.$el)),this.setElement(s),this._render(),this.library.value("small")},value:function(e){var t=this.$el.find(".current").attr("id");e!==undefined&&(this.$el.find(".current").removeClass("current"),this.$el.find("#"+e).addClass("current"));var n=this.$el.find(".current").attr("id");return n===undefined?null:(n!=t&&this.options.onchange&&this.options.onchange(e),n)},_filter:function(e){this.$el.find(".header").hide();var t=this.app.types.attributes;for(var n in t){var r=t[n],i=this.$el.find("#"+n),s=this.$el.find("#types-header-"+this.categories_index[r.category]),o=r.keywords||"";o.indexOf(e)>=0?(i.show(),s.show()):i.hide()}},_render:function(){this.categories={},this.categories_index={};var t=0,n=this.app.types.attributes;for(var r in n){var i=n[r],s=i.category;this.categories[s]||(this.categories[s]={},this.categories_index[s]=t++),this.categories[s][r]=i}for(var s in this.categories){var o=$('<div style="clear: both;"/>');o.append(e.wrap(this._template_header({id:"types-header-"+this.categories_index[s],title:s})));for(var r in this.categories[s]){var i=this.categories[s][r];o.append(e.wrap(this._template_item({id:r,title:i.title+" ("+i.library+")",url:config.app_root+"charts/"+this.app.chartPath(r)+"/logo.png"})))}this.$el.append(e.wrap(o))}},_onclick:function(e){var t=this.value(),n=$(e.target).closest(".item").attr("id");n!=""&&n&&t!=n&&this.value(n)},_ondblclick:function(e){var t=this.value();t&&this.options.ondblclick&&this.options.ondblclick(t)},_template_header:function(e){return'<div id="'+e.id+'" class="header">'+"• "+e.title+"<div>"},_template_item:function(e){return'<div id="'+e.id+'" class="item">'+'<img class="image" src="'+e.url+'">'+'<div class="title">'+e.title+"</div>"+"<div>"}})}),define("plugin/views/editor",["mvc/ui/ui-tabs","plugin/library/ui","mvc/ui/ui-portlet","utils/utils","plugin/models/chart","plugin/models/group","plugin/views/group","plugin/views/settings","plugin/views/types"],function(e,t,n,r,i,s,o,u,a){return Backbone.View.extend({optionsDefault:{header:!0,content:"No content available."},initialize:function(i,s){var o=this;this.app=i,this.chart=this.app.chart,this.options=r.merge(s,this.optionsDefault),this.message=new t.Message,this.portlet=new n.View({icon:"fa-bar-chart-o",title:"Editor",operations:{save:new t.ButtonIcon({icon:"fa-save",tooltip:"Draw Chart",title:"Draw",onclick:function(){o._saveChart()}}),back:new t.ButtonIcon({icon:"fa-caret-left",tooltip:"Return to Viewer",title:"Cancel",onclick:function(){o.app.go("viewer"),o.app.storage.load()}})}}),this.types=new a(i,{onchange:function(e){var t=o.app.types.get(e);t||console.debug("FAILED - Editor::onchange() - Chart type not supported."),o.chart.definition=t,o.chart.settings.clear(),o.chart.set({type:e}),o.chart.set("modified",!0),console.debug("Editor::onchange() - Switched chart type.")},ondblclick:function(e){o._saveChart()}}),this.tabs=new e.View({title_new:"Add Data",onnew:function(){var e=o._addGroupModel();o.tabs.show(e.id)}}),this.title=new t.Input({placeholder:"Chart title",onchange:function(){o.chart.set("title",o.title.value())}});var f=$("<div/>");f.append(r.wrap((new t.Label({title:"Provide a chart title:"})).$el)),f.append(r.wrap(this.title.$el)),f.append(r.wrap(this.types.$el)),this.tabs.add({id:"main",title:"Start",$el:f}),this.settings=new u(this.app),this.tabs.add({id:"settings",title:"Configuration",$el:this.settings.$el}),this.portlet.append(this.message.$el),this.portlet.append(this.tabs.$el),this.setElement(this.portlet.$el),this.tabs.hideOperation("back");var o=this;this.chart.on("change:title",function(e){o._refreshTitle()}),this.chart.on("change:type",function(e){o.types.value(e.get("type"))}),this.chart.on("reset",function(e){o._resetChart()}),this.app.chart.on("redraw",function(e){o.portlet.showOperation("back")}),this.app.chart.groups.on("add",function(e){o._addGroup(e)}),this.app.chart.groups.on("remove",function(e){o._removeGroup(e)}),this.app.chart.groups.on("reset",function(e){o._removeAllGroups()}),this.app.chart.groups.on("change:key",function(e){o._refreshGroupKey()}),this._resetChart()},show:function(){this.$el.show()},hide:function(){this.$el.hide()},_refreshTitle:function(){var e=this.chart.get("title");this.portlet.title(e),this.title.value(e)},_refreshGroupKey:function(){var e=this,t=0;this.chart.groups.each(function(n){var r=n.get("key","");r==""&&(r="Chart data"),e.tabs.title(n.id,++t+": "+r)})},_addGroupModel:function(){var e=new s({id:r.uuid()});return this.chart.groups.add(e),e},_addGroup:function(e){var t=this,n=new o(this.app,{group:e});this.tabs.add({id:e.id,$el:n.$el,ondel:function(){t.chart.groups.remove(e.id)}}),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeGroup:function(e){this.tabs.del(e.id),this._refreshGroupKey(),this.chart.set("modified",!0)},_removeAllGroups:function(e){this.tabs.delRemovable()},_resetChart:function(){this.chart.set("id",r.uuid()),this.chart.set("type","highcharts_bar"),this.chart.set("dataset_id",this.app.options.config.dataset_id),this.chart.set("title","New Chart"),this.portlet.hideOperation("back")},_saveChart:function(){this.chart.set({type:this.types.value(),title:this.title.value(),date:r.time()});if(this.chart.groups.length==0){this.message.update({message:"Please select data columns before drawing the chart."});var e=this._addGroupModel();this.tabs.show(e.id);return}var t=this,n=!0,i=this.chart.definition;this.chart.groups.each(function(e){if(!n)return;for(var r in i.columns)if(e.attributes[r]=="null"){t.message.update({status:"danger",message:"This chart type requires column types not found in your tabular file."}),t.tabs.show(e.id),n=!1;return}});if(!n)return;this.app.go("viewer");var t=this;this.chart.deferred.execute(function(){t.app.storage.save(),t.chart.trigger("redraw")})}})}),define("plugin/models/config",[],function(){return Backbone.Model.extend({defaults:{query_limit:500,query_timeout:100,screenshot_url:"http://export.highcharts.com/"}})}),function(){function t(e,t){return(new Date(t,e+1,0)).getDate()}function n(e,t,n){return function(r,i,s){var o=e(r),u=[];o<r&&t(o);if(s>1)while(o<i){var a=new Date(+o);n(a)%s===0&&u.push(a),t(o)}else while(o<i)u.push(new Date(+o)),t(o);return u}}var e=window.nv||{};e.version="1.1.15b",e.dev=!0,window.nv=e,e.tooltip=e.tooltip||{},e.utils=e.utils||{},e.models=e.models||{},e.charts={},e.graphs=[],e.logs={},e.dispatch=d3.dispatch("render_start","render_end"),e.dev&&(e.dispatch.on("render_start",function(t){e.logs.startTime=+(new Date)}),e.dispatch.on("render_end",function(t){e.logs.endTime=+(new Date),e.logs.totalTime=e.logs.endTime-e.logs.startTime,e.log("total",e.logs.totalTime)})),e.log=function(){if(e.dev&&console.log&&console.log.apply)console.log.apply(console,arguments);else if(e.dev&&typeof console.log=="function"&&Function.prototype.bind){var t=Function.prototype.bind.call(console.log,console);t.apply(console,arguments)}return arguments[arguments.length-1]},e.render=function(n){n=n||1,e.render.active=!0,e.dispatch.render_start(),setTimeout(function(){var t,r;for(var i=0;i<n&&(r=e.render.queue[i]);i++)t=r.generate(),typeof r.callback==typeof Function&&r.callback(t),e.graphs.push(t);e.render.queue.splice(0,i),e.render.queue.length?setTimeout(arguments.callee,0):(e.dispatch.render_end(),e.render.active=!1)},0)},e.render.active=!1,e.render.queue=[],e.addGraph=function(t){typeof arguments[0]==typeof Function&&(t={generate:arguments[0],callback:arguments[1]}),e.render.queue.push(t),e.render.active||e.render()},e.identity=function(e){return e},e.strip=function(e){return e.replace(/(\s|&)/g,"")},d3.time.monthEnd=function(e){return new Date(e.getFullYear(),e.getMonth(),0)},d3.time.monthEnds=n(d3.time.monthEnd,function(e){e.setUTCDate(e.getUTCDate()+1),e.setDate(t(e.getMonth()+1,e.getFullYear()))},function(e){return e.getMonth()}),e.interactiveGuideline=function(){function c(o){o.each(function(o){function g(){var e=d3.mouse(this),n=e[0],r=e[1],o=!0,a=!1;l&&(n=d3.event.offsetX,r=d3.event.offsetY,d3.event.target.tagName!=="svg"&&(o=!1),d3.event.target.className.baseVal.match("nv-legend")&&(a=!0)),o&&(n-=i.left,r-=i.top);if(n<0||r<0||n>p||r>d||d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined||a){if(l&&d3.event.relatedTarget&&d3.event.relatedTarget.ownerSVGElement===undefined&&d3.event.relatedTarget.className.match(t.nvPointerEventsClass))return;u.elementMouseout({mouseX:n,mouseY:r}),c.renderGuideLine(null);return}var f=s.invert(n);u.elementMousemove({mouseX:n,mouseY:r,pointXValue:f}),d3.event.type==="dblclick"&&u.elementDblclick({mouseX:n,mouseY:r,pointXValue:f})}var h=d3.select(this),p=n||960,d=r||400,v=h.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([o]),m=v.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");m.append("g").attr("class","nv-interactiveGuideLine");if(!f)return;f.on("mousemove",g,!0).on("mouseout",g,!0).on("dblclick",g),c.renderGuideLine=function(t){if(!a)return;var n=v.select(".nv-interactiveGuideLine").selectAll("line").data(t!=null?[e.utils.NaNtoZero(t)]:[],String);n.enter().append("line").attr("class","nv-guideline").attr("x1",function(e){return e}).attr("x2",function(e){return e}).attr("y1",d).attr("y2",0),n.exit().remove()}})}var t=e.models.tooltip(),n=null,r=null,i={left:0,top:0},s=d3.scale.linear(),o=d3.scale.linear(),u=d3.dispatch("elementMousemove","elementMouseout","elementDblclick"),a=!0,f=null,l=navigator.userAgent.indexOf("MSIE")!==-1;return c.dispatch=u,c.tooltip=t,c.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.left=typeof e.left!="undefined"?e.left:i.left,c):i},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.xScale=function(e){return arguments.length?(s=e,c):s},c.showGuideLine=function(e){return arguments.length?(a=e,c):a},c.svgContainer=function(e){return arguments.length?(f=e,c):f},c},e.interactiveBisect=function(e,t,n){if(!e instanceof Array)return null;typeof n!="function"&&(n=function(e,t){return e.x});var r=d3.bisector(n).left,i=d3.max([0,r(e,t)-1]),s=n(e[i],i);typeof s=="undefined"&&(s=i);if(s===t)return i;var o=d3.min([i+1,e.length-1]),u=n(e[o],o);return typeof u=="undefined"&&(u=o),Math.abs(u-t)>=Math.abs(s-t)?i:o},e.nearestValueIndex=function(e,t,n){var r=Infinity,i=null;return e.forEach(function(e,s){var o=Math.abs(t-e);o<=r&&o<n&&(r=o,i=s)}),i},function(){window.nv.tooltip={},window.nv.models.tooltip=function(){function y(){if(a){var e=d3.select(a);e.node().tagName!=="svg"&&(e=e.select("svg"));var t=e.node()?e.attr("viewBox"):null;if(t){t=t.split(" ");var n=parseInt(e.style("width"))/t[2];l.left=l.left*n,l.top=l.top*n}}}function b(e){var t;a?t=d3.select(a):t=d3.select("body");var n=t.select(".nvtooltip");return n.node()===null&&(n=t.append("div").attr("class","nvtooltip "+(u?u:"xy-tooltip")).attr("id",h)),n.node().innerHTML=e,n.style("top",0).style("left",0).style("opacity",0),n.selectAll("div, table, td, tr").classed(p,!0),n.classed(p,!0),n.node()}function w(){if(!c)return;if(!g(n))return;y();var t=l.left,u=o!=null?o:l.top,h=b(m(n));f=h;if(a){var p=a.getElementsByTagName("svg")[0],d=p?p.getBoundingClientRect():a.getBoundingClientRect(),v={left:0,top:0};if(p){var E=p.getBoundingClientRect(),S=a.getBoundingClientRect(),x=E.top;if(x<0){var T=a.getBoundingClientRect();x=Math.abs(x)>T.height?0:x}v.top=Math.abs(x-S.top),v.left=Math.abs(E.left-S.left)}t+=a.offsetLeft+v.left-2*a.scrollLeft,u+=a.offsetTop+v.top-2*a.scrollTop}return s&&s>0&&(u=Math.floor(u/s)*s),e.tooltip.calcTooltipPosition([t,u],r,i,h),w}var t=null,n=null,r="w",i=50,s=25,o=null,u=null,a=null,f=null,l={left:null,top:null},c=!0,h="nvtooltip-"+Math.floor(Math.random()*1e5),p="nv-pointer-events-none",d=function(e,t){return e},v=function(e){return e},m=function(e){if(t!=null)return t;if(e==null)return"";var n=d3.select(document.createElement("table")),r=n.selectAll("thead").data([e]).enter().append("thead");r.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(v(e.value));var i=n.selectAll("tbody").data([e]).enter().append("tbody"),s=i.selectAll("tr").data(function(e){return e.series}).enter().append("tr").classed("highlight",function(e){return e.highlight});s.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(e){return e.color}),s.append("td").classed("key",!0).html(function(e){return e.key}),s.append("td").classed("value",!0).html(function(e,t){return d(e.value,t)}),s.selectAll("td").each(function(e){if(e.highlight){var t=d3.scale.linear().domain([0,1]).range(["#fff",e.color]),n=.6;d3.select(this).style("border-bottom-color",t(n)).style("border-top-color",t(n))}});var o=n.node().outerHTML;return e.footer!==undefined&&(o+="<div class='footer'>"+e.footer+"</div>"),o},g=function(e){return e&&e.series&&e.series.length>0?!0:!1};return w.nvPointerEventsClass=p,w.content=function(e){return arguments.length?(t=e,w):t},w.tooltipElem=function(){return f},w.contentGenerator=function(e){return arguments.length?(typeof e=="function"&&(m=e),w):m},w.data=function(e){return arguments.length?(n=e,w):n},w.gravity=function(e){return arguments.length?(r=e,w):r},w.distance=function(e){return arguments.length?(i=e,w):i},w.snapDistance=function(e){return arguments.length?(s=e,w):s},w.classes=function(e){return arguments.length?(u=e,w):u},w.chartContainer=function(e){return arguments.length?(a=e,w):a},w.position=function(e){return arguments.length?(l.left=typeof e.left!="undefined"?e.left:l.left,l.top=typeof e.top!="undefined"?e.top:l.top,w):l},w.fixedTop=function(e){return arguments.length?(o=e,w):o},w.enabled=function(e){return arguments.length?(c=e,w):c},w.valueFormatter=function(e){return arguments.length?(typeof e=="function"&&(d=e),w):d},w.headerFormatter=function(e){return arguments.length?(typeof e=="function"&&(v=e),w):v},w.id=function(){return h},w},e.tooltip.show=function(t,n,r,i,s,o){var u=document.createElement("div");u.className="nvtooltip "+(o?o:"xy-tooltip");var a=s;if(!s||s.tagName.match(/g|svg/i))a=document.getElementsByTagName("body")[0];u.style.left=0,u.style.top=0,u.style.opacity=0,u.innerHTML=n,a.appendChild(u),s&&(t[0]=t[0]-s.scrollLeft,t[1]=t[1]-s.scrollTop),e.tooltip.calcTooltipPosition(t,r,i,u)},e.tooltip.findFirstNonSVGParent=function(e){while(e.tagName.match(/^g|svg$/i)!==null)e=e.parentNode;return e},e.tooltip.findTotalOffsetTop=function(e,t){var n=t;do isNaN(e.offsetTop)||(n+=e.offsetTop);while(e=e.offsetParent);return n},e.tooltip.findTotalOffsetLeft=function(e,t){var n=t;do isNaN(e.offsetLeft)||(n+=e.offsetLeft);while(e=e.offsetParent);return n},e.tooltip.calcTooltipPosition=function(t,n,r,i){var s=parseInt(i.offsetHeight),o=parseInt(i.offsetWidth),u=e.utils.windowSize().width,a=e.utils.windowSize().height,f=window.pageYOffset,l=window.pageXOffset,c,h;a=window.innerWidth>=document.body.scrollWidth?a:a-16,u=window.innerHeight>=document.body.scrollHeight?u:u-16,n=n||"s",r=r||20;var p=function(t){return e.tooltip.findTotalOffsetTop(t,h)},d=function(t){return e.tooltip.findTotalOffsetLeft(t,c)};switch(n){case"e":c=t[0]-o-r,h=t[1]-s/2;var v=d(i),m=p(i);v<l&&(c=t[0]+r>l?t[0]+r:l-v+c),m<f&&(h=f-m+h),m+s>f+a&&(h=f+a-m+h-s);break;case"w":c=t[0]+r,h=t[1]-s/2;var v=d(i),m=p(i);v+o>u&&(c=t[0]-o-r),m<f&&(h=f+5),m+s>f+a&&(h=f+a-m+h-s);break;case"n":c=t[0]-o/2-5,h=t[1]+r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),m+s>f+a&&(h=f+a-m+h-s);break;case"s":c=t[0]-o/2,h=t[1]-s-r;var v=d(i),m=p(i);v<l&&(c=l+5),v+o>u&&(c=c-o/2+5),f>m&&(h=f);break;case"none":c=t[0],h=t[1]-r;var v=d(i),m=p(i)}return i.style.left=c+"px",i.style.top=h+"px",i.style.opacity=1,i.style.position="absolute",i},e.tooltip.cleanup=function(){var e=document.getElementsByClassName("nvtooltip"),t=[];while(e.length)t.push(e[0]),e[0].style.transitionDelay="0 !important",e[0].style.opacity=0,e[0].className="nvtooltip-pending-removal";setTimeout(function(){while(t.length){var e=t.pop();e.parentNode.removeChild(e)}},500)}}(),e.utils.windowSize=function(){var e={width:640,height:480};return document.body&&document.body.offsetWidth&&(e.width=document.body.offsetWidth,e.height=document.body.offsetHeight),document.compatMode=="CSS1Compat"&&document.documentElement&&document.documentElement.offsetWidth&&(e.width=document.documentElement.offsetWidth,e.height=document.documentElement.offsetHeight),window.innerWidth&&window.innerHeight&&(e.width=window.innerWidth,e.height=window.innerHeight),e},e.utils.windowResize=function(e){if(e===undefined)return;var t=window.onresize;window.onresize=function(n){typeof t=="function"&&t(n),e(n)}},e.utils.getColor=function(t){return arguments.length?Object.prototype.toString.call(t)==="[object Array]"?function(e,n){return e.color||t[n%t.length]}:t:e.utils.defaultColor()},e.utils.defaultColor=function(){var e=d3.scale.category20().range();return function(t,n){return t.color||e[n%e.length]}},e.utils.customTheme=function(e,t,n){t=t||function(e){return e.key},n=n||d3.scale.category20().range();var r=n.length;return function(i,s){var o=t(i);return r||(r=n.length),typeof e[o]!="undefined"?typeof e[o]=="function"?e[o]():e[o]:n[--r]}},e.utils.pjax=function(t,n){function r(r){d3.html(r,function(r){var i=d3.select(n).node();i.parentNode.replaceChild(d3.select(r).select(n).node(),i),e.utils.pjax(t,n)})}d3.selectAll(t).on("click",function(){history.pushState(this.href,this.textContent,this.href),r(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&r(d3.event.state)})},e.utils.calcApproxTextWidth=function(e){if(typeof e.style=="function"&&typeof e.text=="function"){var t=parseInt(e.style("font-size").replace("px","")),n=e.text().length;return n*t*.5}return 0},e.utils.NaNtoZero=function(e){return typeof e!="number"||isNaN(e)||e===null||e===Infinity?0:e},e.utils.optionsFunc=function(e){return e&&d3.map(e).forEach(function(e,t){typeof this[e]=="function"&&this[e](t)}.bind(this)),this},e.models.axis=function(){function m(e){return e.each(function(e){var i=d3.select(this),m=i.selectAll("g.nv-wrap.nv-axis").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),y=g.append("g"),b=m.select("g");p!==null?t.ticks(p):(t.orient()=="top"||t.orient()=="bottom")&&t.ticks(Math.abs(s.range()[1]-s.range()[0])/100),b.call(t),v=v||t.scale();var w=t.tickFormat();w==null&&(w=v.tickFormat());var E=b.selectAll("text.nv-axislabel").data([o||null]);E.exit().remove();switch(t.orient()){case"top":E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",0).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+s(e)+",0)"}).select("text").attr("dy","-0.5em").attr("y",-t.tickPadding()).attr("text-anchor","middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+s.range()[t]+",0)"})}break;case"bottom":var T=36,N=30,C=b.selectAll("g").select("text");if(f%360){C.each(function(e,t){var n=this.getBBox().width;n>N&&(N=n)});var k=Math.abs(Math.sin(f*Math.PI/180)),T=(k?k*N:N)+30;C.attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f%360>0?"start":"end")}E.enter().append("text").attr("class","nv-axislabel");var S=s.range().length==2?s.range()[1]:s.range()[s.range().length-1]+(s.range()[1]-s.range()[0]);E.attr("text-anchor","middle").attr("y",T).attr("x",S/2);if(u){var x=m.selectAll("g.nv-axisMaxMin").data([s.domain()[0],s.domain()[s.domain().length-1]]);x.enter().append("g").attr("class","nv-axisMaxMin").append("text"),x.exit().remove(),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",t.tickPadding()).attr("transform",function(e,t,n){return"rotate("+f+" 0,0)"}).style("text-anchor",f?f%360>0?"start":"end":"middle").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate("+(s(e)+(h?s.rangeBand()/2:0))+",0)"})}c&&C.attr("transform",function(e,t){return"translate(0,"+(t%2==0?"0":"12")+")"});break;case"right":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"begin").attr("transform",l?"rotate(90)":"").attr("y",l?-Math.max(n.right,r)+12:-10).attr("x",l?s.range()[0]/2:t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+s(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",t.tickPadding()).style("text-anchor","start").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}break;case"left":E.enter().append("text").attr("class","nv-axislabel"),E.style("text-anchor",l?"middle":"end").attr("transform",l?"rotate(-90)":"").attr("y",l?-Math.max(n.left,r)+d:-10).attr("x",l?-s.range()[0]/2:-t.tickPadding());if(u){var x=m.selectAll("g.nv-axisMaxMin").data(s.domain());x.enter().append("g").attr("class","nv-axisMaxMin").append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(e,t){return"translate(0,"+v(e)+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-t.tickPadding()).attr("text-anchor","end").text(function(e,t){var n=w(e);return(""+n).match("NaN")?"":n}),x.attr("transform",function(e,t){return"translate(0,"+s.range()[t]+")"}).select("text").style("opacity",1)}}E.text(function(e){return e}),u&&(t.orient()==="left"||t.orient()==="right")&&(b.selectAll("g").each(function(e,t){d3.select(this).select("text").attr("opacity",1);if(s(e)<s.range()[1]+10||s(e)>s.range()[0]-10)(e>1e-10||e<-1e-10)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0)}),s.domain()[0]==s.domain()[1]&&s.domain()[0]==0&&m.selectAll("g.nv-axisMaxMin").style("opacity",function(e,t){return t?0:1}));if(u&&(t.orient()==="top"||t.orient()==="bottom")){var L=[];m.selectAll("g.nv-axisMaxMin").each(function(e,t){try{t?L.push(s(e)-this.getBBox().width-4):L.push(s(e)+this.getBBox().width+4)}catch(n){t?L.push(s(e)-4):L.push(s(e)+4)}}),b.selectAll("g").each(function(e,t){if(s(e)<L[0]||s(e)>L[1])e>1e-10||e<-1e-10?d3.select(this).remove():d3.select(this).select("text").remove()})}a&&b.selectAll(".tick").filter(function(e){return!parseFloat(Math.round(e.__data__*1e5)/1e6)&&e.__data__!==undefined}).classed("zero",!0),v=s.copy()}),m}var t=d3.svg.axis(),n={top:0,right:0,bottom:0,left:0},r=75,i=60,s=d3.scale.linear(),o=null,u=!0,a=!0,f=0,l=!0,c=!1,h=!1,p=null,d=12;t.scale(s).orient("bottom").tickFormat(function(e){return e});var v;return m.axis=t,d3.rebind(m,t,"orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"),d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.ticks=function(e){return arguments.length?(p=e,m):p},m.height=function(e){return arguments.length?(i=e,m):i},m.axisLabel=function(e){return arguments.length?(o=e,m):o},m.showMaxMin=function(e){return arguments.length?(u=e,m):u},m.highlightZero=function(e){return arguments.length?(a=e,m):a},m.scale=function(e){return arguments.length?(s=e,t.scale(s),h=typeof s.rangeBands=="function",d3.rebind(m,s,"domain","range","rangeBand","rangeBands"),m):s},m.rotateYLabel=function(e){return arguments.length?(l=e,m):l},m.rotateLabels=function(e){return arguments.length?(f=e,m):f},m.staggerLabels=function(e){return arguments.length?(c=e,m):c},m.axisLabelDistance=function(e){return arguments.length?(d=e,m):d},m},e.models.historicalBar=function(){function w(E){return E.each(function(w){var E=n-t.left-t.right,S=r-t.top-t.bottom,T=d3.select(this);s.domain(d||d3.extent(w[0].values.map(u).concat(f))),c?s.range(m||[E*.5/w[0].values.length,E*(w[0].values.length-.5)/w[0].values.length]):s.range(m||[0,E]),o.domain(v||d3.extent(w[0].values.map(a).concat(l))).range(g||[S,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=T.selectAll("g.nv-wrap.nv-historicalBar-"+i).data([w[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+i),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-bars"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){y.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",E).attr("height",S),A.attr("clip-path",h?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-bars").selectAll(".nv-bar").data(function(e){return e},function(e,t){return u(e,t)});O.exit().remove();var M=O.enter().append("rect").attr("x",0).attr("y",function(t,n){return e.utils.NaNtoZero(o(Math.max(0,a(t,n))))}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.abs(o(a(t,n))-o(0)))}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).on("mouseover",function(e,t){if(!b)return;d3.select(this).classed("hover",!0),y.elementMouseover({point:e,series:w[0],pos:[s(u(e,t)),o(a(e,t))],pointIndex:t,seriesIndex:0,e:d3.event})}).on("mouseout",function(e,t){if(!b)return;d3.select(this).classed("hover",!1),y.elementMouseout({point:e,series:w[0],pointIndex:t,seriesIndex:0,e:d3.event})}).on("click",function(e,t){if(!b)return;y.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){if(!b)return;y.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("fill",function(e,t){return p(e,t)}).attr("class",function(e,t,n){return(a(e,t)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+n+"-"+t}).attr("transform",function(e,t){return"translate("+(s(u(e,t))-E/w[0].values.length*.45)+",0)"}).attr("width",E/w[0].values.length*.9),O.attr("y",function(t,n){var r=a(t,n)<0?o(0):o(0)-o(a(t,n))<1?o(0)-1:o(a(t,n));return e.utils.NaNtoZero(r)}).attr("height",function(t,n){return e.utils.NaNtoZero(Math.max(Math.abs(o(a(t,n))-o(0)),1))})}),w}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[],l=[0],c=!1,h=!0,p=e.utils.defaultColor(),d,v,m,g,y=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),b=!0;return w.highlightPoint=function(e,t){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar-0-"+e).classed("hover",t)},w.clearHighlights=function(){d3.select(".nv-historicalBar-"+i).select(".nv-bars .nv-bar.hover").classed("hover",!1)},w.dispatch=y,w.options=e.utils.optionsFunc.bind(w),w.x=function(e){return arguments.length?(u=e,w):u},w.y=function(e){return arguments.length?(a=e,w):a},w.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,w):t},w.width=function(e){return arguments.length?(n=e,w):n},w.height=function(e){return arguments.length?(r=e,w):r},w.xScale=function(e){return arguments.length?(s=e,w):s},w.yScale=function(e){return arguments.length?(o=e,w):o},w.xDomain=function(e){return arguments.length?(d=e,w):d},w.yDomain=function(e){return arguments.length?(v=e,w):v},w.xRange=function(e){return arguments.length?(m=e,w):m},w.yRange=function(e){return arguments.length?(g=e,w):g},w.forceX=function(e){return arguments.length?(f=e,w):f},w.forceY=function(e){return arguments.length?(l=e,w):l},w.padData=function(e){return arguments.length?(c=e,w):c},w.clipEdge=function(e){return arguments.length?(h=e,w):h},w.color=function(t){return arguments.length?(p=e.utils.getColor(t),w):p},w.id=function(e){return arguments.length?(i=e,w):i},w.interactive=function(e){return arguments.length?(b=!1,w):b},w},e.models.bullet=function(){function m(e){return e.each(function(e,n){var p=c-t.left-t.right,m=h-t.top-t.bottom,g=d3.select(this),y=i.call(this,e,n).slice().sort(d3.descending),b=s.call(this,e,n).slice().sort(d3.descending),w=o.call(this,e,n).slice().sort(d3.descending),E=u.call(this,e,n).slice(),S=a.call(this,e,n).slice(),x=f.call(this,e,n).slice(),T=d3.scale.linear().domain(d3.extent(d3.merge([l,y]))).range(r?[p,0]:[0,p]),N=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(T.range());this.__chart__=T;var C=d3.min(y),k=d3.max(y),L=y[1],A=g.selectAll("g.nv-wrap.nv-bullet").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),M=O.append("g"),_=A.select("g");M.append("rect").attr("class","nv-range nv-rangeMax"),M.append("rect").attr("class","nv-range nv-rangeAvg"),M.append("rect").attr("class","nv-range nv-rangeMin"),M.append("rect").attr("class","nv-measure"),M.append("path").attr("class","nv-markerTriangle"),A.attr("transform","translate("+t.left+","+t.top+")");var D=function(e){return Math.abs(N(e)-N(0))},P=function(e){return Math.abs(T(e)-T(0))},H=function(e){return e<0?N(e):N(0)},B=function(e){return e<0?T(e):T(0)};_.select("rect.nv-rangeMax").attr("height",m).attr("width",P(k>0?k:C)).attr("x",B(k>0?k:C)).datum(k>0?k:C),_.select("rect.nv-rangeAvg").attr("height",m).attr("width",P(L)).attr("x",B(L)).datum(L),_.select("rect.nv-rangeMin").attr("height",m).attr("width",P(k)).attr("x",B(k)).attr("width",P(k>0?C:k)).attr("x",B(k>0?C:k)).datum(k>0?C:k),_.select("rect.nv-measure").style("fill",d).attr("height",m/3).attr("y",m/3).attr("width",w<0?T(0)-T(w[0]):T(w[0])-T(0)).attr("x",B(w)).on("mouseover",function(){v.elementMouseover({value:w[0],label:x[0]||"Current",pos:[T(w[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:w[0],label:x[0]||"Current"})});var j=m/6;b[0]?_.selectAll("path.nv-markerTriangle").attr("transform",function(e){return"translate("+T(b[0])+","+m/2+")"}).attr("d","M0,"+j+"L"+j+","+ -j+" "+ -j+","+ -j+"Z").on("mouseover",function(){v.elementMouseover({value:b[0],label:S[0]||"Previous",pos:[T(b[0]),m/2]})}).on("mouseout",function(){v.elementMouseout({value:b[0],label:S[0]||"Previous"})}):_.selectAll("path.nv-markerTriangle").remove(),A.selectAll(".nv-range").on("mouseover",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseover({value:e,label:n,pos:[T(e),m/2]})}).on("mouseout",function(e,t){var n=E[t]||(t?t==1?"Mean":"Minimum":"Maximum");v.elementMouseout({value:e,label:n})})}),m}var t={top:0,right:0,bottom:0,left:0},n="left",r=!1,i=function(e){return e.ranges},s=function(e){return e.markers},o=function(e){return e.measures},u=function(e){return e.rangeLabels?e.rangeLabels:[]},a=function(e){return e.markerLabels?e.markerLabels:[]},f=function(e){return e.measureLabels?e.measureLabels:[]},l=[0],c=380,h=30,p=null,d=e.utils.getColor(["#1f77b4"]),v=d3.dispatch("elementMouseover","elementMouseout");return m.dispatch=v,m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(i=e,m):i},m.markers=function(e){return arguments.length?(s=e,m):s},m.measures=function(e){return arguments.length?(o=e,m):o},m.forceX=function(e){return arguments.length?(l=e,m):l},m.width=function(e){return arguments.length?(c=e,m):c},m.height=function(e){return arguments.length?(h=e,m):h},m.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,m):t},m.tickFormat=function(e){return arguments.length?(p=e,m):p},m.color=function(t){return arguments.length?(d=e.utils.getColor(t),m):d},m},e.models.bulletChart=function(){function m(e){return e.each(function(n,h){var g=d3.select(this),y=(a||parseInt(g.style("width"))||960)-i.left-i.right,b=f-i.top-i.bottom,w=this;m.update=function(){m(e)},m.container=this;if(!n||!s.call(this,n,h)){var E=g.selectAll(".nv-noData").data([p]);return E.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),E.attr("x",i.left+y/2).attr("y",18+i.top+b/2).text(function(e){return e}),m}g.selectAll(".nv-noData").remove();var S=s.call(this,n,h).slice().sort(d3.descending),x=o.call(this,n,h).slice().sort(d3.descending),T=u.call(this,n,h).slice().sort(d3.descending),N=g.selectAll("g.nv-wrap.nv-bulletChart").data([n]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-bulletWrap"),k.append("g").attr("class","nv-titles"),N.attr("transform","translate("+i.left+","+i.top+")");var A=d3.scale.linear().domain([0,Math.max(S[0],x[0],T[0])]).range(r?[y,0]:[0,y]),O=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(A.range());this.__chart__=A;var M=function(e){return Math.abs(O(e)-O(0))},_=function(e){return Math.abs(A(e)-A(0))},D=k.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(f-i.top-i.bottom)/2+")");D.append("text").attr("class","nv-title").text(function(e){return e.title}),D.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(e){return e.subtitle}),t.width(y).height(b);var P=L.select(".nv-bulletWrap");d3.transition(P).call(t);var H=l||A.tickFormat(y/100),B=L.selectAll("g.nv-tick").data(A.ticks(y/50),function(e){return this.textContent||H(e)}),j=B.enter().append("g").attr("class","nv-tick").attr("transform",function(e){return"translate("+O(e)+",0)"}).style("opacity",1e-6);j.append("line").attr("y1",b).attr("y2",b*7/6),j.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",b*7/6).text(H);var F=d3.transition(B).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1);F.select("line").attr("y1",b).attr("y2",b*7/6),F.select("text").attr("y",b*7/6),d3.transition(B.exit()).attr("transform",function(e){return"translate("+A(e)+",0)"}).style("opacity",1e-6).remove(),d.on("tooltipShow",function(e){e.key=n.title,c&&v(e,w.parentNode)})}),d3.timer.flush(),m}var t=e.models.bullet(),n="left",r=!1,i={top:5,right:40,bottom:20,left:120},s=function(e){return e.ranges},o=function(e){return e.markers},u=function(e){return e.measures},a=null,f=55,l=null,c=!0,h=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},p="No Data Available.",d=d3.dispatch("tooltipShow","tooltipHide"),v=function(t,n){var r=t.pos[0]+(n.offsetLeft||0)+i.left,s=t.pos[1]+(n.offsetTop||0)+i.top,o=h(t.key,t.label,t.value,t,m);e.tooltip.show([r,s],o,t.value<0?"e":"w",null,n)};return t.dispatch.on("elementMouseover.tooltip",function(e){d.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){d.tooltipHide(e)}),d.on("tooltipHide",function(){c&&e.tooltip.cleanup()}),m.dispatch=d,m.bullet=t,d3.rebind(m,t,"color"),m.options=e.utils.optionsFunc.bind(m),m.orient=function(e){return arguments.length?(n=e,r=n=="right"||n=="bottom",m):n},m.ranges=function(e){return arguments.length?(s=e,m):s},m.markers=function(e){return arguments.length?(o=e,m):o},m.measures=function(e){return arguments.length?(u=e,m):u},m.width=function(e){return arguments.length?(a=e,m):a},m.height=function(e){return arguments.length?(f=e,m):f},m.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,m):i},m.tickFormat=function(e){return arguments.length?(l=e,m):l},m.tooltips=function(e){return arguments.length?(c=e,m):c},m.tooltipContent=function(e){return arguments.length?(h=e,m):h},m.noData=function(e){return arguments.length?(p=e,m):p},m},e.models.cumulativeLineChart=function(){function D(b){return b.each(function(b){function I(e,t){d3.select(D.container).style("cursor","ew-resize")}function q(e,t){M.x=d3.event.x,M.i=Math.round(O.invert(M.x)),nt()}function R(e,t){d3.select(D.container).style("cursor","auto"),x.index=M.i,k.stateChange(x)}function nt(){tt.data([M]);var e=D.transitionDuration();D.transitionDuration(0),D.update(),D.transitionDuration(e)}var L=d3.select(this).classed("nv-chart-"+S,!0),A=this,H=(f||parseInt(L.style("width"))||960)-u.left-u.right,B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom;D.update=function(){L.call(D)},D.container=this,x.disabled=b.map(function(e){return!!e.disabled});if(!T){var j;T={};for(j in x)x[j]instanceof Array?T[j]=x[j].slice(0):T[j]=x[j]}var F=d3.behavior.drag().on("dragstart",I).on("drag",q).on("dragend",R);if(!b||!b.length||!b.filter(function(e){return e.values.length}).length){var U=L.selectAll(".nv-noData").data([N]);return U.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),U.attr("x",u.left+H/2).attr("y",u.top+B/2).text(function(e){return e}),D}L.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();if(!y){var z=b.filter(function(e){return!e.disabled}).map(function(e,n){var r=d3.extent(e.values,t.y());return r[0]<-0.95&&(r[0]=-0.95),[(r[0]-r[1])/(1+r[1]),(r[1]-r[0])/(1+r[0])]}),W=[d3.min(z,function(e){return e[0]}),d3.max(z,function(e){return e[1]})];t.yDomain(W)}else t.yDomain(null);O.domain([0,b[0].values.length-1]).range([0,H]).clamp(!0);var b=P(M.i,b),X=g?"none":"all",V=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([b]),$=V.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),J=V.select("g");$.append("g").attr("class","nv-interactive"),$.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),$.append("g").attr("class","nv-y nv-axis"),$.append("g").attr("class","nv-background"),$.append("g").attr("class","nv-linesWrap").style("pointer-events",X),$.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),$.append("g").attr("class","nv-legendWrap"),$.append("g").attr("class","nv-controlsWrap"),c&&(i.width(H),J.select(".nv-legendWrap").datum(b).call(i),u.top!=i.height()&&(u.top=i.height(),B=(l||parseInt(L.style("height"))||400)-u.top-u.bottom),J.select(".nv-legendWrap").attr("transform","translate(0,"+ -u.top+")"));if(m){var K=[{key:"Re-scale y-axis",disabled:!y}];s.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),J.select(".nv-controlsWrap").datum(K).attr("transform","translate(0,"+ -u.top+")").call(s)}V.attr("transform","translate("+u.left+","+u.top+")"),d&&J.select(".nv-y.nv-axis").attr("transform","translate("+H+",0)");var Q=b.filter(function(e){return e.tempDisabled});V.select(".tempDisabled").remove(),Q.length&&V.append("text").attr("class","tempDisabled").attr("x",H/2).attr("y","-.71em").style("text-anchor","end").text(Q.map(function(e){return e.key}).join(", ")+" values cannot be calculated for this time period."),g&&(o.width(H).height(B).margin({left:u.left,top:u.top}).svgContainer(L).xScale(w),V.select(".nv-interactive").call(o)),$.select(".nv-background").append("rect"),J.select(".nv-background rect").attr("width",H).attr("height",B),t.y(function(e){return e.display.y}).width(H).height(B).color(b.map(function(e,t){return e.color||a(e,t)}).filter(function(e,t){return!b[t].disabled&&!b[t].tempDisabled}));var G=J.select(".nv-linesWrap").datum(b.filter(function(e){return!e.disabled&&!e.tempDisabled}));G.call(t),b.forEach(function(e,t){e.seriesIndex=t});var Y=b.filter(function(e){return!e.disabled&&!!C(e)}),Z=J.select(".nv-avgLinesWrap").selectAll("line").data(Y,function(e){return e.key}),et=function(e){var t=E(C(e));return t<0?0:t>B?B:t};Z.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(e,n){return t.color()(e,e.seriesIndex)}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.style("stroke-opacity",function(e){var t=E(C(e));return t<0||t>B?0:1}).attr("x1",0).attr("x2",H).attr("y1",et).attr("y2",et),Z.exit().remove();var tt=G.selectAll(".nv-indexLine").data([M]);tt.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(F),tt.attr("transform",function(e){return"translate("+O(e.i)+",0)"}).attr("height",B),h&&(n.scale(w).ticks(Math.min(b[0].values.length,H/70)).tickSize(-B,0),J.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),d3.transition(J.select(".nv-x.nv-axis")).call(n)),p&&(r.scale(E).ticks(B/36).tickSize(-H,0),d3.transition(J.select(".nv-y.nv-axis")).call(r)),J.select(".nv-background rect").on("click",function(){M.x=d3.mouse(this)[0],M.i=Math.round(O.invert(M.x)),x.index=M.i,k.stateChange(x),nt()}),t.dispatch.on("elementClick",function(e){M.i=e.pointIndex,M.x=O(M.i),x.index=M.i,k.stateChange(x),nt()}),s.dispatch.on("legendClick",function(e,t){e.disabled=!e.disabled,y=!e.disabled,x.rescaleY=y,k.stateChange(x),D.update()}),i.dispatch.on("stateChange",function(e){x.disabled=e.disabled,k.stateChange(x),D.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,f,l,c=[];b.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,D.x()),t.highlightPoint(r,f,!0);var o=n.values[f];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof l=="undefined"&&(l=D.xScale()(D.x()(o,f))),c.push({key:n.key,value:D.y()(o,f),color:a(n,n.seriesIndex)})});if(c.length>2){var h=D.yScale().invert(i.mouseY),p=Math.abs(D.yScale().domain()[0]-D.yScale().domain()[1]),d=.03*p,m=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);m!==null&&(c[m].highlight=!0)}var g=n.tickFormat()(D.x()(s,f),f);o.tooltip.position({left:l+u.left,top:i.mouseY+u.top}).chartContainer(A.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:g,series:c})(),o.renderGuideLine(l)}),o.dispatch.on("elementMouseout",function(e){k.tooltipHide(),t.clearHighlights()}),k.on("tooltipShow",function(e){v&&_(e,A.parentNode)}),k.on("changeState",function(e){typeof e.disabled!="undefined"&&(b.forEach(function(t,n){t.disabled=e.disabled[n]}),x.disabled=e.disabled),typeof e.index!="undefined"&&(M.i=e.index,M.x=O(M.i),x.index=e.index,tt.data([M])),typeof e.rescaleY!="undefined"&&(y=e.rescaleY),D.update()})}),D}function P(e,n){return n.map(function(n,r){if(!n.values)return n;var i=n.values[e];if(i==null)return n;var s=t.y()(i,e);return s<-0.95&&!A?(n.tempDisabled=!0,n):(n.tempDisabled=!1,n.values=n.values.map(function(e,n){return e.display={y:(t.y()(e,n)-s)/(1+s)},e}),n)})}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:30,bottom:50,left:60},a=e.utils.defaultColor(),f=null,l=null,c=!0,h=!0,p=!0,d=!1,v=!0,m=!0,g=!1,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},w,E,S=t.id(),x={index:0,rescaleY:y},T=null,N="No Data Available.",C=function(e){return e.average},k=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),L=0,A=!1;n.orient("bottom").tickPadding(7),r.orient(d?"right":"left"),s.updateState(!1);var O=d3.scale.linear(),M={i:0,x:0},_=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,D);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],k.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){k.tooltipHide(e)}),k.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),D.dispatch=k,D.lines=t,D.legend=i,D.xAxis=n,D.yAxis=r,D.interactiveLayer=o,d3.rebind(D,t,"defined","isArea","x","y","xScale","yScale","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id"),D.options=e.utils.optionsFunc.bind(D),D.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,D):u},D.width=function(e){return arguments.length?(f=e,D):f},D.height=function(e){return arguments.length?(l=e,D):l},D.color=function(t){return arguments.length?(a=e.utils.getColor(t),i.color(a),D):a},D.rescaleY=function(e){return arguments.length?(y=e,D):y},D.showControls=function(e){return arguments.length?(m=e,D):m},D.useInteractiveGuideline=function(e){return arguments.length?(g=e,e===!0&&(D.interactive(!1),D.useVoronoi(!1)),D):g},D.showLegend=function(e){return arguments.length?(c=e,D):c},D.showXAxis=function(e){return arguments.length?(h=e,D):h},D.showYAxis=function(e){return arguments.length?(p=e,D):p},D.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),D):d},D.tooltips=function(e){return arguments.length?(v=e,D):v},D.tooltipContent=function(e){return arguments.length?(b=e,D):b},D.state=function(e){return arguments.length?(x=e,D):x},D.defaultState=function(e){return arguments.length?(T=e,D):T},D.noData=function(e){return arguments.length?(N=e,D):N},D.average=function(e){return arguments.length?(C=e,D):C},D.transitionDuration=function(e){return arguments.length?(L=e,D):L},D.noErrorCheck=function(e){return arguments.length?(A=e,D):A},D},e.models.discreteBar=function(){function E(e){return e.each(function(e){var i=n-t.left-t.right,E=r-t.top-t.bottom,S=d3.select(this);e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var T=p&&d?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0}})});s.domain(p||d3.merge(T).map(function(e){return e.x})).rangeBands(v||[0,i],.1),o.domain(d||d3.extent(d3.merge(T).map(function(e){return e.y}).concat(f))),c?o.range(m||[E-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]):o.range(m||[E,0]),b=b||s,w=w||o.copy().range([o(0),o(0)]);var N=S.selectAll("g.nv-wrap.nv-discretebar").data([e]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-groups"),N.attr("transform","translate("+t.left+","+t.top+")");var A=N.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),A.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),A.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),A.style("stroke-opacity",1).style("fill-opacity",.75);var O=A.selectAll("g.nv-bar").data(function(e){return e.values});O.exit().remove();var M=O.enter().append("g").attr("transform",function(e,t,n){return"translate("+(s(u(e,t))+s.rangeBand()*.05)+", "+o(0)+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),g.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),g.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){g.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){g.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(t.series+.5)/e.length,o(a(t,n))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()});M.append("rect").attr("height",0).attr("width",s.rangeBand()*.9/e.length),c?(M.append("text").attr("text-anchor","middle"),O.select("text").text(function(e,t){return h(a(e,t))}).attr("x",s.rangeBand()*.9/2).attr("y",function(e,t){return a(e,t)<0?o(a(e,t))-o(0)+12:-4})):O.selectAll("text").remove(),O.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(e,t){return e.color||l(e,t)}).style("stroke",function(e,t){return e.color||l(e,t)}).select("rect").attr("class",y).attr("width",s.rangeBand()*.9/e.length),O.attr("transform",function(e,t){var n=s(u(e,t))+s.rangeBand()*.05,r=a(e,t)<0?o(0):o(0)-o(a(e,t))<1?o(0)-1:o(a(e,t));return"translate("+n+", "+r+")"}).select("rect").attr("height",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(d&&d[0]||0))||1)}),b=s.copy(),w=o.copy()}),E}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=!1,h=d3.format(",.2f"),p,d,v,m,g=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),y="discreteBar",b,w;return E.dispatch=g,E.options=e.utils.optionsFunc.bind(E),E.x=function(e){return arguments.length?(u=e,E):u},E.y=function(e){return arguments.length?(a=e,E):a},E.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,E):t},E.width=function(e){return arguments.length?(n=e,E):n},E.height=function(e){return arguments.length?(r=e,E):r},E.xScale=function(e){return arguments.length?(s=e,E):s},E.yScale=function(e){return arguments.length?(o=e,E):o},E.xDomain=function(e){return arguments.length?(p=e,E):p},E.yDomain=function(e){return arguments.length?(d=e,E):d},E.xRange=function(e){return arguments.length?(v=e,E):v},E.yRange=function(e){return arguments.length?(m=e,E):m},E.forceY=function(e){return arguments.length?(f=e,E):f},E.color=function(t){return arguments.length?(l=e.utils.getColor(t),E):l},E.id=function(e){return arguments.length?(i=e,E):i},E.showValues=function(e){return arguments.length?(c=e,E):c},E.valueFormat=function(e){return arguments.length?(h=e,E):h},E.rectClass=function(e){return arguments.length?(y=e,E):y},E},e.models.discreteBarChart=function(){function w(e){return e.each(function(e){var u=d3.select(this),p=this,y=(s||parseInt(u.style("width"))||960)-i.left-i.right,E=(o||parseInt(u.style("height"))||400)-i.top-i.bottom;w.update=function(){g.beforeUpdate(),u.call(w)},w.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var S=u.selectAll(".nv-noData").data([m]);return S.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),S.attr("x",i.left+y/2).attr("y",i.top+E/2).text(function(e){return e}),w}u.selectAll(".nv-noData").remove(),d=t.xScale(),v=t.yScale().clamp(!0);var T=u.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),C=N.append("defs"),k=T.select("g");N.append("g").attr("class","nv-x nv-axis"),N.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),N.append("g").attr("class","nv-barsWrap"),k.attr("transform","translate("+i.left+","+i.top+")"),l&&k.select(".nv-y.nv-axis").attr("transform","translate("+y+",0)"),t.width(y).height(E);var L=k.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));L.call(t),C.append("clipPath").attr("id","nv-x-label-clip-"+t.id()).append("rect"),k.select("#nv-x-label-clip-"+t.id()+" rect").attr("width",d.rangeBand()*(c?2:1)).attr("height",16).attr("x",-d.rangeBand()/(c?1:2));if(a){n.scale(d).ticks(y/100).tickSize(-E,0),k.select(".nv-x.nv-axis").attr("transform","translate(0,"+(v.range()[0]+(t.showValues()&&v.domain()[0]<0?16:0))+")"),k.select(".nv-x.nv-axis").call(n);var A=k.select(".nv-x.nv-axis").selectAll("g");c&&A.selectAll("text").attr("transform",function(e,t,n){return"translate(0,"+(n%2==0?"5":"17")+")"})}f&&(r.scale(v).ticks(E/36).tickSize(-y,0),k.select(".nv-y.nv-axis").call(r)),k.select(".nv-zeroLine line").attr("x1",0).attr("x2",y).attr("y1",v(0)).attr("y2",v(0)),g.on("tooltipShow",function(e){h&&b(e,p.parentNode)})}),w}var t=e.models.discreteBar(),n=e.models.axis(),r=e.models.axis(),i={top:15,right:10,bottom:50,left:60},s=null,o=null,u=e.utils.getColor(),a=!0,f=!0,l=!1,c=!1,h=!0,p=function(e,t,n,r,i){return"<h3>"+t+"</h3>"+"<p>"+n+"</p>"},d,v,m="No Data Available.",g=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate"),y=0;n.orient("bottom").highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(l?"right":"left").tickFormat(d3.format(",.1f"));var b=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=p(i.series.key,a,f,i,w);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+i.left,e.pos[1]+i.top],g.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){g.tooltipHide(e)}),g.on("tooltipHide",function(){h&&e.tooltip.cleanup()}),w.dispatch=g,w.discretebar=t,w.xAxis=n,w.yAxis=r,d3.rebind(w,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","id","showValues","valueFormat"),w.options=e.utils.optionsFunc.bind(w),w.margin=function(e){return arguments.length?(i.top=typeof e.top!="undefined"?e.top:i.top,i.right=typeof e.right!="undefined"?e.right:i.right,i.bottom=typeof e.bottom!="undefined"?e.bottom:i.bottom,i.left=typeof e.left!="undefined"?e.left:i.left,w):i},w.width=function(e){return arguments.length?(s=e,w):s},w.height=function(e){return arguments.length?(o=e,w):o},w.color=function(n){return arguments.length?(u=e.utils.getColor(n),t.color(u),w):u},w.showXAxis=function(e){return arguments.length?(a=e,w):a},w.showYAxis=function(e){return arguments.length?(f=e,w):f},w.rightAlignYAxis=function(e){return arguments.length?(l=e,r.orient(e?"right":"left"),w):l},w.staggerLabels=function(e){return arguments.length?(c=e,w):c},w.tooltips=function(e){return arguments.length?(h=e,w):h},w.tooltipContent=function(e){return arguments.length?(p=e,w):p},w.noData=function(e){return arguments.length?(m=e,w):m},w.transitionDuration=function(e){return arguments.length?(y=e,w):y},w},e.models.distribution=function(){function l(e){return e.each(function(e){var a=n-(i==="x"?t.left+t.right:t.top+t.bottom),l=i=="x"?"y":"x",c=d3.select(this);f=f||u;var h=c.selectAll("g.nv-distribution").data([e]),p=h.enter().append("g").attr("class","nvd3 nv-distribution"),d=p.append("g"),v=h.select("g");h.attr("transform","translate("+t.left+","+t.top+")");var m=v.selectAll("g.nv-dist").data(function(e){return e},function(e){return e.key});m.enter().append("g"),m.attr("class",function(e,t){return"nv-dist nv-series-"+t}).style("stroke",function(e,t){return o(e,t)});var g=m.selectAll("line.nv-dist"+i).data(function(e){return e.values});g.enter().append("line").attr(i+"1",function(e,t){return f(s(e,t))}).attr(i+"2",function(e,t){return f(s(e,t))}),m.exit().selectAll("line.nv-dist"+i).attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}).style("stroke-opacity",0).remove(),g.attr("class",function(e,t){return"nv-dist"+i+" nv-dist"+i+"-"+t}).attr(l+"1",0).attr(l+"2",r),g.attr(i+"1",function(e,t){return u(s(e,t))}).attr(i+"2",function(e,t){return u(s(e,t))}),f=u.copy()}),l}var t={top:0,right:0,bottom:0,left:0},n=400,r=8,i="x",s=function(e){return e[i]},o=e.utils.defaultColor(),u=d3.scale.linear(),a,f;return l.options=e.utils.optionsFunc.bind(l),l.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,l):t},l.width=function(e){return arguments.length?(n=e,l):n},l.axis=function(e){return arguments.length?(i=e,l):i},l.size=function(e){return arguments.length?(r=e,l):r},l.getData=function(e){return arguments.length?(s=d3.functor(e),l):s},l.scale=function(e){return arguments.length?(u=e,l):u},l.color=function(t){return arguments.length?(o=e.utils.getColor(t),l):o},l},e.models.historicalBarChart=function(){function x(e){return e.each(function(d){var E=d3.select(this),T=this,N=(u||parseInt(E.style("width"))||960)-s.left-s.right,C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom;x.update=function(){E.call(x)},x.container=this,g.disabled=d.map(function(e){return!!e.disabled});if(!y){var k;y={};for(k in g)g[k]instanceof Array?y[k]=g[k].slice(0):y[k]=g[k]}if(!d||!d.length||!d.filter(function(e){return e.values.length}).length){var L=E.selectAll(".nv-noData").data([b]);return L.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),L.attr("x",s.left+N/2).attr("y",s.top+C/2).text(function(e){return e}),x}E.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale();var A=E.selectAll("g.nv-wrap.nv-historicalBarChart").data([d]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),M=A.select("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-barsWrap"),O.append("g").attr("class","nv-legendWrap"),f&&(i.width(N),M.select(".nv-legendWrap").datum(d).call(i),s.top!=i.height()&&(s.top=i.height(),C=(a||parseInt(E.style("height"))||400)-s.top-s.bottom),A.select(".nv-legendWrap").attr("transform","translate(0,"+ -s.top+")")),A.attr("transform","translate("+s.left+","+s.top+")"),h&&M.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)"),t.width(N).height(C).color(d.map(function(e,t){return e.color||o(e,t)}).filter(function(e,t){return!d[t].disabled}));var _=M.select(".nv-barsWrap").datum(d.filter(function(e){return!e.disabled}));_.call(t),l&&(n.scale(v).tickSize(-C,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+m.range()[0]+")"),M.select(".nv-x.nv-axis").call(n)),c&&(r.scale(m).ticks(C/36).tickSize(-N,0),M.select(".nv-y.nv-axis").call(r)),i.dispatch.on("legendClick",function(t,n){t.disabled=!t.disabled,d.filter(function(e){return!e.disabled}).length||d.map(function(e){return e.disabled=!1,A.selectAll(".nv-series").classed("disabled",!1),e}),g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),e.call(x)}),i.dispatch.on("legendDblclick",function(e){d.forEach(function(e){e.disabled=!0}),e.disabled=!1,g.disabled=d.map(function(e){return!!e.disabled}),w.stateChange(g),x.update()}),w.on("tooltipShow",function(e){p&&S(e,T.parentNode)}),w.on("changeState",function(e){typeof e.disabled!="undefined"&&(d.forEach(function(t,n){t.disabled=e.disabled[n]}),g.disabled=e.disabled),x.update()})}),x}var t=e.models.historicalBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s={top:30,right:90,bottom:50,left:90},o=e.utils.defaultColor(),u=null,a=null,f=!1,l=!0,c=!0,h=!1,p=!0,d=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},v,m,g={},y=null,b="No Data Available.",w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),E=0;n.orient("bottom").tickPadding(7),r.orient(h?"right":"left");var S=function(i,s){if(s){var o=d3.select(s).select("svg"),u=o.node()?o.attr("viewBox"):null;if(u){u=u.split(" ");var a=parseInt(o.style("width"))/u[2];i.pos[0]=i.pos[0]*a,i.pos[1]=i.pos[1]*a}}var f=i.pos[0]+(s.offsetLeft||0),l=i.pos[1]+(s.offsetTop||0),c=n.tickFormat()(t.x()(i.point,i.pointIndex)),h=r.tickFormat()(t.y()(i.point,i.pointIndex)),p=d(i.series.key,c,h,i,x);e.tooltip.show([f,l],p,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+s.left,e.pos[1]+s.top],w.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){w.tooltipHide(e)}),w.on("tooltipHide",function(){p&&e.tooltip.cleanup()}),x.dispatch=w,x.bars=t,x.legend=i,x.xAxis=n,x.yAxis=r,d3.rebind(x,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id","interpolate","highlightPoint","clearHighlights","interactive"),x.options=e.utils.optionsFunc.bind(x),x.margin=function(e){return arguments.length?(s.top=typeof e.top!="undefined"?e.top:s.top,s.right=typeof e.right!="undefined"?e.right:s.right,s.bottom=typeof e.bottom!="undefined"?e.bottom:s.bottom,s.left=typeof e.left!="undefined"?e.left:s.left,x):s},x.width=function(e){return arguments.length?(u=e,x):u},x.height=function(e){return arguments.length?(a=e,x):a},x.color=function(t){return arguments.length?(o=e.utils.getColor(t),i.color(o),x):o},x.showLegend=function(e){return arguments.length?(f=e,x):f},x.showXAxis=function(e){return arguments.length?(l=e,x):l},x.showYAxis=function(e){return arguments.length?(c=e,x):c},x.rightAlignYAxis=function(e){return arguments.length?(h=e,r.orient(e?"right":"left"),x):h},x.tooltips=function(e){return arguments.length?(p=e,x):p},x.tooltipContent=function(e){return arguments.length?(d=e,x):d},x.state=function(e){return arguments.length?(g=e,x):g},x.defaultState=function(e){return arguments.length?(y=e,x):y},x.noData=function(e){return arguments.length?(b=e,x):b},x.transitionDuration=function(e){return arguments.length?(E=e,x):E},x},e.models.indentedTree=function(){function g(e){return e.each(function(e){function k(e,t,n){d3.event.stopPropagation();if(d3.event.shiftKey&&!n)return d3.event.shiftKey=!1,e.values&&e.values.forEach(function(e){(e.values||e._values)&&k(e,0,!0)}),!0;if(!O(e))return!0;e.values?(e._values=e.values,e.values=null):(e.values=e._values,e._values=null),g.update()}function L(e){return e._values&&e._values.length?h:e.values&&e.values.length?p:""}function A(e){return e._values&&e._values.length}function O(e){var t=e.values||e._values;return t&&t.length}var t=1,n=d3.select(this),i=d3.layout.tree().children(function(e){return e.values}).size([r,f]);g.update=function(){n.call(g)},e[0]||(e[0]={key:a});var s=i.nodes(e[0]),y=d3.select(this).selectAll("div").data([[s]]),b=y.enter().append("div").attr("class","nvd3 nv-wrap nv-indentedtree"),w=b.append("table"),E=y.select("table").attr("width","100%").attr("class",c);if(o){var S=w.append("thead"),x=S.append("tr");l.forEach(function(e){x.append("th").attr("width",e.width?e.width:"10%").style("text-align",e.type=="numeric"?"right":"left").append("span").text(e.label)})}var T=E.selectAll("tbody").data(function(e){return e});T.enter().append("tbody"),t=d3.max(s,function(e){return e.depth}),i.size([r,t*f]);var N=T.selectAll("tr").data(function(e){return e.filter(function(e){return u&&!e.children?u(e):!0})},function(e,t){return e.id||e.id||++m});N.exit().remove(),N.select("img.nv-treeicon").attr("src",L).classed("folded",A);var C=N.enter().append("tr");l.forEach(function(e,t){var n=C.append("td").style("padding-left",function(e){return(t?0:e.depth*f+12+(L(e)?0:16))+"px"},"important").style("text-align",e.type=="numeric"?"right":"left");t==0&&n.append("img").classed("nv-treeicon",!0).classed("nv-folded",A).attr("src",L).style("width","14px").style("height","14px").style("padding","0 1px").style("display",function(e){return L(e)?"inline-block":"none"}).on("click",k),n.each(function(n){!t&&v(n)?d3.select(this).append("a").attr("href",v).attr("class",d3.functor(e.classes)).append("span"):d3.select(this).append("span"),d3.select(this).select("span").attr("class",d3.functor(e.classes)).text(function(t){return e.format?t[e.key]?e.format(t[e.key]):"-":t[e.key]||"-"})}),e.showCount&&(n.append("span").attr("class","nv-childrenCount"),N.selectAll("span.nv-childrenCount").text(function(e){return e.values&&e.values.length||e._values&&e._values.length?"("+(e.values&&e.values.filter(function(e){return u?u(e):!0}).length||e._values&&e._values.filter(function(e){return u?u(e):!0}).length||0)+")":""}))}),N.order().on("click",function(e){d.elementClick({row:this,data:e,pos:[e.x,e.y]})}).on("dblclick",function(e){d.elementDblclick({row:this,data:e,pos:[e.x,e.y]})}).on("mouseover",function(e){d.elementMouseover({row:this,data:e,pos:[e.x,e.y]})}).on("mouseout",function(e){d.elementMouseout({row:this,data:e,pos:[e.x,e.y]})})}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e4),o=!0,u=!1,a="No Data Available.",f=20,l=[{key:"key",label:"Name",type:"text"}],c=null,h="images/grey-plus.png",p="images/grey-minus.png",d=d3.dispatch("elementClick","elementDblclick","elementMouseover","elementMouseout"),v=function(e){return e.url},m=0;return g.options=e.utils.optionsFunc.bind(g),g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),scatter.color(i),g):i},g.id=function(e){return arguments.length?(s=e,g):s},g.header=function(e){return arguments.length?(o=e,g):o},g.noData=function(e){return arguments.length?(a=e,g):a},g.filterZero=function(e){return arguments.length?(u=e,g):u},g.columns=function(e){return arguments.length?(l=e,g):l},g.tableClass=function(e){return arguments.length?(c=e,g):c},g.iconOpen=function(e){return arguments.length?(h=e,g):h},g.iconClose=function(e){return arguments.length?(p=e,g):p},g.getUrl=function(e){return arguments.length?(v=e,g):v},g},e.models.legend=function(){function c(h){return h.each(function(c){var h=n-t.left-t.right,p=d3.select(this),d=p.selectAll("g.nv-legend").data([c]),v=d.enter().append("g").attr("class","nvd3 nv-legend").append("g"),m=d.select("g");d.attr("transform","translate("+t.left+","+t.top+")");var g=m.selectAll(".nv-series").data(function(e){return e}),y=g.enter().append("g").attr("class","nv-series").on("mouseover",function(e,t){l.legendMouseover(e,t)}).on("mouseout",function(e,t){l.legendMouseout(e,t)}).on("click",function(e,t){l.legendClick(e,t),a&&(f?(c.forEach(function(e){e.disabled=!0}),e.disabled=!1):(e.disabled=!e.disabled,c.every(function(e){return e.disabled})&&c.forEach(function(e){e.disabled=!1})),l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))}).on("dblclick",function(e,t){l.legendDblclick(e,t),a&&(c.forEach(function(e){e.disabled=!0}),e.disabled=!1,l.stateChange({disabled:c.map(function(e){return!!e.disabled})}))});y.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),y.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8"),g.classed("disabled",function(e){return e.disabled}),g.exit().remove(),g.select("circle").style("fill",function(e,t){return e.color||s(e,t)}).style("stroke",function(e,t){return e.color||s(e,t)}),g.select("text").text(i);if(o){var b=[];g.each(function(t,n){var r=d3.select(this).select("text"),i;try{i=r.getComputedTextLength();if(i<=0)throw Error()}catch(s){i=e.utils.calcApproxTextWidth(r)}b.push(i+28)});var w=0,E=0,S=[];while(E<h&&w<b.length)S[w]=b[w],E+=b[w++];w===0&&(w=1);while(E>h&&w>1){S=[],w--;for(var x=0;x<b.length;x++)b[x]>(S[x%w]||0)&&(S[x%w]=b[x]);E=S.reduce(function(e,t,n,r){return e+t})}var T=[];for(var N=0,C=0;N<w;N++)T[N]=C,C+=S[N];g.attr("transform",function(e,t){return"translate("+T[t%w]+","+(5+Math.floor(t/w)*20)+")"}),u?m.attr("transform","translate("+(n-t.right-E)+","+t.top+")"):m.attr("transform","translate(0,"+t.top+")"),r=t.top+t.bottom+Math.ceil(b.length/w)*20}else{var k=5,L=5,A=0,O;g.attr("transform",function(e,r){var i=d3.select(this).select("text").node().getComputedTextLength()+28;return O=L,n<t.left+t.right+O+i&&(L=O=5,k+=20),L+=i,L>A&&(A=L),"translate("+O+","+k+")"}),m.attr("transform","translate("+(n-t.right-A)+","+t.top+")"),r=t.top+t.bottom+k+15}}),c}var t={top:5,right:0,bottom:5,left:0},n=400,r=20,i=function(e){return e.key},s=e.utils.defaultColor(),o=!0,u=!0,a=!0,f=!1,l=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange");return c.dispatch=l,c.options=e.utils.optionsFunc.bind(c),c.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,c):t},c.width=function(e){return arguments.length?(n=e,c):n},c.height=function(e){return arguments.length?(r=e,c):r},c.key=function(e){return arguments.length?(i=e,c):i},c.color=function(t){return arguments.length?(s=e.utils.getColor(t),c):s},c.align=function(e){return arguments.length?(o=e,c):o},c.rightAlign=function(e){return arguments.length?(u=e,c):u},c.updateState=function(e){return arguments.length?(a=e,c):a},c.radioButtonMode=function(e){return arguments.length?(f=e,c):f},c},e.models.line=function(){function m(g){return g.each(function(m){var g=r-n.left-n.right,b=i-n.top-n.bottom,w=d3.select(this);c=t.xScale(),h=t.yScale(),d=d||c,v=v||h;var E=w.selectAll("g.nv-wrap.nv-line").data([m]),S=E.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),T=S.append("defs"),N=S.append("g"),C=E.select("g");N.append("g").attr("class","nv-groups"),N.append("g").attr("class","nv-scatterWrap"),E.attr("transform","translate("+n.left+","+n.top+")"),t.width(g).height(b);var k=E.select(".nv-scatterWrap");k.call(t),T.append("clipPath").attr("id","nv-edge-clip-"+t.id()).append("rect"),E.select("#nv-edge-clip-"+t.id()+" rect").attr("width",g).attr("height",b>0?b:0),C.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":""),k.attr("clip-path",l?"url(#nv-edge-clip-"+t.id()+")":"");var L=E.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});L.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),L.exit().remove(),L.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return s(e,t)}).style("stroke",function(e,t){return s(e,t)}),L.style("stroke-opacity",1).style("fill-opacity",.5);var A=L.selectAll("path.nv-area").data(function(e){return f(e)?[e]:[]});A.enter().append("path").attr("class","nv-area").attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))}).y1(function(e,t){return v(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])}),L.exit().selectAll("path.nv-area").remove(),A.attr("d",function(t){return d3.svg.area().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y0(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))}).y1(function(e,t){return h(h.domain()[0]<=0?h.domain()[1]>=0?0:h.domain()[1]:h.domain()[0])}).apply(this,[t.values])});var O=L.selectAll("path.nv-line").data(function(e){return[e.values]});O.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(d(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(v(u(t,n)))})),O.attr("d",d3.svg.line().interpolate(p).defined(a).x(function(t,n){return e.utils.NaNtoZero(c(o(t,n)))}).y(function(t,n){return e.utils.NaNtoZero(h(u(t,n)))})),d=c.copy(),v=h.copy()}),m}var t=e.models.scatter(),n={top:0,right:0,bottom:0,left:0},r=960,i=500,s=e.utils.defaultColor(),o=function(e){return e.x},u=function(e){return e.y},a=function(e,t){return!isNaN(u(e,t))&&u(e,t)!==null},f=function(e){return e.area},l=!1,c,h,p="linear";t.size(16).sizeDomain([16,256]);var d,v;return m.dispatch=t.dispatch,m.scatter=t,d3.rebind(m,t,"id","interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","padData","highlightPoint","clearHighlights"),m.options=e.utils.optionsFunc.bind(m),m.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,m):n},m.width=function(e){return arguments.length?(r=e,m):r},m.height=function(e){return arguments.length?(i=e,m):i},m.x=function(e){return arguments.length?(o=e,t.x(e),m):o},m.y=function(e){return arguments.length?(u=e,t.y(e),m):u},m.clipEdge=function(e){return arguments.length?(l=e,m):l},m.color=function(n){return arguments.length?(s=e.utils.getColor(n),t.color(s),m):s},m.interpolate=function(e){return arguments.length?(p=e,m):p},m.defined=function(e){return arguments.length?(a=e,m):a},m.isArea=function(e){return arguments.length?(f=d3.functor(e),m):f},m},e.models.lineChart=function(){function N(m){return m.each(function(m){var x=d3.select(this),C=this,k=(a||parseInt(x.style("width"))||960)-o.left-o.right,L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom;N.update=function(){x.call(N)},N.container=this,b.disabled=m.map(function(e){return!!e.disabled});if(!w){var A;w={};for(A in b)b[A]instanceof Array?w[A]=b[A].slice(0):w[A]=b[A]}if(!m||!m.length||!m.filter(function(e){return e.values.length}).length){var O=x.selectAll(".nv-noData").data([E]);return O.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),O.attr("x",o.left+k/2).attr("y",o.top+L/2).text(function(e){return e}),N}x.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var M=x.selectAll("g.nv-wrap.nv-lineChart").data([m]),_=M.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),D=M.select("g");_.append("rect").style("opacity",0),_.append("g").attr("class","nv-x nv-axis"),_.append("g").attr("class","nv-y nv-axis"),_.append("g").attr("class","nv-linesWrap"),_.append("g").attr("class","nv-legendWrap"),_.append("g").attr("class","nv-interactive"),D.select("rect").attr("width",k).attr("height",L>0?L:0),l&&(i.width(k),D.select(".nv-legendWrap").datum(m).call(i),o.top!=i.height()&&(o.top=i.height(),L=(f||parseInt(x.style("height"))||400)-o.top-o.bottom),M.select(".nv-legendWrap").attr("transform","translate(0,"+ -o.top+")")),M.attr("transform","translate("+o.left+","+o.top+")"),p&&D.select(".nv-y.nv-axis").attr("transform","translate("+k+",0)"),d&&(s.width(k).height(L).margin({left:o.left,top:o.top}).svgContainer(x).xScale(g),M.select(".nv-interactive").call(s)),t.width(k).height(L).color(m.map(function(e,t){return e.color||u(e,t)}).filter(function(e,t){return!m[t].disabled}));var P=D.select(".nv-linesWrap").datum(m.filter(function(e){return!e.disabled}));P.call(t),c&&(n.scale(g).ticks(k/100).tickSize(-L,0),D.select(".nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),D.select(".nv-x.nv-axis").call(n)),h&&(r.scale(y).ticks(L/36).tickSize(-k,0),D.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),N.update()}),s.dispatch.on("elementMousemove",function(i){t.clearHighlights();var a,f,l,c=[];m.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){f=e.interactiveBisect(n.values,i.pointXValue,N.x()),t.highlightPoint(r,f,!0);var s=n.values[f];if(typeof s=="undefined")return;typeof a=="undefined"&&(a=s),typeof l=="undefined"&&(l=N.xScale()(N.x()(s,f))),c.push({key:n.key,value:N.y()(s,f),color:u(n,n.seriesIndex)})});if(c.length>2){var h=N.yScale().invert(i.mouseY),p=Math.abs(N.yScale().domain()[0]-N.yScale().domain()[1]),d=.03*p,g=e.nearestValueIndex(c.map(function(e){return e.value}),h,d);g!==null&&(c[g].highlight=!0)}var y=n.tickFormat()(N.x()(a,f));s.tooltip.position({left:l+o.left,top:i.mouseY+o.top}).chartContainer(C.parentNode).enabled(v).valueFormatter(function(e,t){return r.tickFormat()(e)}).data({value:y,series:c})(),s.renderGuideLine(l)}),s.dispatch.on("elementMouseout",function(e){S.tooltipHide(),t.clearHighlights()}),S.on("tooltipShow",function(e){v&&T(e,C.parentNode)}),S.on("changeState",function(e){typeof e.disabled!="undefined"&&m.length===e.disabled.length&&(m.forEach(function(t,n){t.disabled=e.disabled[n]}),b.disabled=e.disabled),N.update()})}),N}var t=e.models.line(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.interactiveGuideline(),o={top:30,right:20,bottom:50,left:60},u=e.utils.defaultColor(),a=null,f=null,l=!0,c=!0,h=!0,p=!1,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=0;n.orient("bottom").tickPadding(7),r.orient(p?"right":"left");var T=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,N);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),N.dispatch=S,N.lines=t,N.legend=i,N.xAxis=n,N.yAxis=r,N.interactiveLayer=s,d3.rebind(N,t,"defined","isArea","x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","useVoronoi","id","interpolate"),N.options=e.utils.optionsFunc.bind(N),N.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,N):o},N.width=function(e){return arguments.length?(a=e,N):a},N.height=function(e){return arguments.length?(f=e,N):f},N.color=function(t){return arguments.length?(u=e.utils.getColor(t),i.color(u),N):u},N.showLegend=function(e){return arguments.length?(l=e,N):l},N.showXAxis=function(e){return arguments.length?(c=e,N):c},N.showYAxis=function(e){return arguments.length?(h=e,N):h},N.rightAlignYAxis=function(e){return arguments.length?(p=e,r.orient(e?"right":"left"),N):p},N.useInteractiveGuideline=function(e){return arguments.length?(d=e,e===!0&&(N.interactive(!1),N.useVoronoi(!1)),N):d},N.tooltips=function(e){return arguments.length?(v=e,N):v},N.tooltipContent=function(e){return arguments.length?(m=e,N):m},N.state=function(e){return arguments.length?(b=e,N):b},N.defaultState=function(e){return arguments.length?(w=e,N):w},N.noData=function(e){return arguments.length?(E=e,N):E},N.transitionDuration=function(e){return arguments.length?(x=e,N):x},N},e.models.linePlusBarChart=function(){function T(e){return e.each(function(e){var l=d3.select(this),c=this,v=(a||parseInt(l.style("width"))||960)-u.left-u.right,N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom;T.update=function(){l.call(T)},b.disabled=e.map(function(e){return!!e.disabled});if(!w){var C;w={};for(C in b)b[C]instanceof Array?w[C]=b[C].slice(0):w[C]=b[C]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var k=l.selectAll(".nv-noData").data([E]);return k.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),k.attr("x",u.left+v/2).attr("y",u.top+N/2).text(function(e){return e}),T}l.selectAll(".nv-noData").remove();var L=e.filter(function(e){return!e.disabled&&e.bar}),A=e.filter(function(e){return!e.bar});m=A.filter(function(e){return!e.disabled}).length&&A.filter(function(e){return!e.disabled})[0].values.length?t.xScale():n.xScale(),g=n.yScale(),y=t.yScale();var O=d3.select(this).selectAll("g.nv-wrap.nv-linePlusBar").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y1 nv-axis"),M.append("g").attr("class","nv-y2 nv-axis"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-linesWrap"),M.append("g").attr("class","nv-legendWrap"),p&&(o.width(v/2),_.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(o),u.top!=o.height()&&(u.top=o.height(),N=(f||parseInt(l.style("height"))||400)-u.top-u.bottom),_.select(".nv-legendWrap").attr("transform","translate("+v/2+","+ -u.top+")")),O.attr("transform","translate("+u.left+","+u.top+")"),t.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar})),n.width(v).height(N).color(e.map(function(e,t){return e.color||h(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar}));var D=_.select(".nv-barsWrap").datum(L.length?L:[{values:[]}]),P=_.select(".nv-linesWrap").datum(A[0]&&!A[0].disabled?A:[{values:[]}]);d3.transition(D).call(n),d3.transition(P).call(t),r.scale(m).ticks(v/100).tickSize(-N,0),_.select(".nv-x.nv-axis").attr("transform","translate(0,"+g.range()[0]+")"),d3.transition(_.select(".nv-x.nv-axis")).call(r),i.scale(g).ticks(N/36).tickSize(-v,0),d3.transition(_.select(".nv-y1.nv-axis")).style("opacity",L.length?1:0).call(i),s.scale(y).ticks(N/36).tickSize(L.length?0:-v,0),_.select(".nv-y2.nv-axis").style("opacity",A.length?1:0).attr("transform","translate("+v+",0)"),d3.transition(_.select(".nv-y2.nv-axis")).call(s),o.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),T.update()}),S.on("tooltipShow",function(e){d&&x(e,c.parentNode)}),S.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),b.disabled=t.disabled),T.update()})}),T}var t=e.models.line(),n=e.models.historicalBar(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.legend(),u={top:30,right:60,bottom:50,left:60},a=null,f=null,l=function(e){return e.x},c=function(e){return e.y},h=e.utils.defaultColor(),p=!0,d=!0,v=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},m,g,y,b={},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState");n.padData(!0),t.clipEdge(!1).padData(!0),r.orient("bottom").tickPadding(7).highlightZero(!1),i.orient("left"),s.orient("right");var x=function(n,o){var u=n.pos[0]+(o.offsetLeft||0),a=n.pos[1]+(o.offsetTop||0),f=r.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?i:s).tickFormat()(t.y()(n.point,n.pointIndex)),c=v(n.series.key,f,l,n,T);e.tooltip.show([u,a],c,n.value<0?"n":"s",null,o)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),n.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],S.tooltipShow(e)}),n.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){d&&e.tooltip.cleanup()}),T.dispatch=S,T.legend=o,T.lines=t,T.bars=n,T.xAxis=r,T.y1Axis=i,T.y2Axis=s,d3.rebind(T,t,"defined","size","clipVoronoi","interpolate"),T.options=e.utils.optionsFunc.bind(T),T.x=function(e){return arguments.length?(l=e,t.x(e),n.x(e),T):l},T.y=function(e){return arguments.length?(c=e,t.y(e),n.y(e),T):c},T.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,T):u},T.width=function(e){return arguments.length?(a=e,T):a},T.height=function(e){return arguments.length?(f=e,T):f},T.color=function(t){return arguments.length?(h=e.utils.getColor(t),o.color(h),T):h},T.showLegend=function(e){return arguments.length?(p=e,T):p},T.tooltips=function(e){return arguments.length?(d=e,T):d},T.tooltipContent=function(e){return arguments.length?(v=e,T):v},T.state=function(e){return arguments.length?(b=e,T):b},T.defaultState=function(e){return arguments.length?(w=e,T):w},T.noData=function(e){return arguments.length?(E=e,T):E},T},e.models.lineWithFocusChart=function(){function k(e){return e.each(function(e){function R(e){var t=+(e=="e"),n=t?1:-1,r=O/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function U(){a.empty()||a.extent(w),F.data([a.empty()?g.domain():w]).each(function(e,t){var n=g(e[0])-v.range()[0],r=v.range()[1]-g(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",g(e[1])).attr("width",r<0?0:r)})}function z(){w=a.empty()?null:a.extent();var n=a.empty()?g.domain():a.extent();if(Math.abs(n[0]-n[1])<=1)return;T.brush({extent:n,brush:a}),U();var s=P.select(".nv-focus .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}).map(function(e,r){return{key:e.key,values:e.values.filter(function(e,r){return t.x()(e,r)>=n[0]&&t.x()(e,r)<=n[1]})}}));s.call(t),P.select(".nv-focus .nv-x.nv-axis").call(r),P.select(".nv-focus .nv-y.nv-axis").call(i)}var S=d3.select(this),N=this,L=(h||parseInt(S.style("width"))||960)-f.left-f.right,A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d,O=d-l.top-l.bottom;k.update=function(){S.call(k)},k.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var M=S.selectAll(".nv-noData").data([x]);return M.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),M.attr("x",f.left+L/2).attr("y",f.top+A/2).text(function(e){return e}),k}S.selectAll(".nv-noData").remove(),v=t.xScale(),m=t.yScale(),g=n.xScale(),y=n.yScale();var _=S.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([e]),D=_.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),P=_.select("g");D.append("g").attr("class","nv-legendWrap");var H=D.append("g").attr("class","nv-focus");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-linesWrap");var B=D.append("g").attr("class","nv-context");B.append("g").attr("class","nv-x nv-axis"),B.append("g").attr("class","nv-y nv-axis"),B.append("g").attr("class","nv-linesWrap"),B.append("g").attr("class","nv-brushBackground"),B.append("g").attr("class","nv-x nv-brush"),b&&(u.width(L),P.select(".nv-legendWrap").datum(e).call(u),f.top!=u.height()&&(f.top=u.height(),A=(p||parseInt(S.style("height"))||400)-f.top-f.bottom-d),P.select(".nv-legendWrap").attr("transform","translate(0,"+ -f.top+")")),_.attr("transform","translate("+f.left+","+f.top+")"),t.width(L).height(A).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),n.defined(t.defined()).width(L).height(O).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),P.select(".nv-context").attr("transform","translate(0,"+(A+f.bottom+l.top)+")");var j=P.select(".nv-context .nv-linesWrap").datum(e.filter(function(e){return!e.disabled}));d3.transition(j).call(n),r.scale(v).ticks(L/100).tickSize(-A,0),i.scale(m).ticks(A/36).tickSize(-L,0),P.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+A+")"),a.x(g).on("brush",function(){var e=k.transitionDuration();k.transitionDuration(0),z(),k.transitionDuration(e)}),w&&a.extent(w);var F=P.select(".nv-brushBackground").selectAll("g").data([w||a.extent()]),I=F.enter().append("g");I.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",O),I.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",O);var q=P.select(".nv-x.nv-brush").call(a);q.selectAll("rect").attr("height",O),q.selectAll(".resize").append("path").attr("d",R),z(),s.scale(g).ticks(L/100).tickSize(-O,0),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),d3.transition(P.select(".nv-context .nv-x.nv-axis")).call(s),o.scale(y).ticks(O/36).tickSize(-L,0),d3.transition(P.select(".nv-context .nv-y.nv-axis")).call(o),P.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+y.range()[0]+")"),u.dispatch.on("stateChange",function(e){k.update()}),T.on("tooltipShow",function(e){E&&C(e,N.parentNode)})}),k}var t=e.models.line(),n=e.models.line(),r=e.models.axis(),i=e.models.axis(),s=e.models.axis(),o=e.models.axis(),u=e.models.legend(),a=d3.svg.brush(),f={top:30,right:30,bottom:30,left:60},l={top:0,right:30,bottom:20,left:60},c=e.utils.defaultColor(),h=null,p=null,d=100,v,m,g,y,b=!0,w=null,E=!0,S=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},x="No Data Available.",T=d3.dispatch("tooltipShow","tooltipHide","brush"),N=0;t.clipEdge(!0),n.interactive(!1),r.orient("bottom").tickPadding(5),i.orient("left"),s.orient("bottom").tickPadding(5),o.orient("left");var C=function(n,s){var o=n.pos[0]+(s.offsetLeft||0),u=n.pos[1]+(s.offsetTop||0),a=r.tickFormat()(t.x()(n.point,n.pointIndex)),f=i.tickFormat()(t.y()(n.point,n.pointIndex)),l=S(n.series.key,a,f,n,k);e.tooltip.show([o,u],l,null,null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+f.left,e.pos[1]+f.top],T.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){E&&e.tooltip.cleanup()}),k.dispatch=T,k.legend=u,k.lines=t,k.lines2=n,k.xAxis=r,k.yAxis=i,k.x2Axis=s,k.y2Axis=o,d3.rebind(k,t,"defined","isArea","size","xDomain","yDomain","xRange","yRange","forceX","forceY","interactive","clipEdge","clipVoronoi","id"),k.options=e.utils.optionsFunc.bind(k),k.x=function(e){return arguments.length?(t.x(e),n.x(e),k):t.x},k.y=function(e){return arguments.length?(t.y(e),n.y(e),k):t.y},k.margin=function(e){return arguments.length?(f.top=typeof e.top!="undefined"?e.top:f.top,f.right=typeof e.right!="undefined"?e.right:f.right,f.bottom=typeof e.bottom!="undefined"?e.bottom:f.bottom,f.left=typeof e.left!="undefined"?e.left:f.left,k):f},k.margin2=function(e){return arguments.length?(l=e,k):l},k.width=function(e){return arguments.length?(h=e,k):h},k.height=function(e){return arguments.length?(p=e,k):p},k.height2=function(e){return arguments.length?(d=e,k):d},k.color=function(t){return arguments.length?(c=e.utils.getColor(t),u.color(c),k):c},k.showLegend=function(e){return arguments.length?(b=e,k):b},k.tooltips=function(e){return arguments.length?(E=e,k):E},k.tooltipContent=function(e){return arguments.length?(S=e,k):S},k.interpolate=function(e){return arguments.length?(t.interpolate(e),n.interpolate(e),k):t.interpolate()},k.noData=function(e){return arguments.length?(x=e,k):x},k.xTickFormat=function(e){return arguments.length?(r.tickFormat(e),s.tickFormat(e),k):r.tickFormat()},k.yTickFormat=function(e){return arguments.length?(i.tickFormat(e),o.tickFormat(e),k):i.tickFormat()},k.brushExtent=function(e){return arguments.length?(w=e,k):w},k.transitionDuration=function(e){return arguments.length?(N=e,k):N},k},e.models.linePlusBarWithFocusChart=function(){function B(e){return e.each(function(e){function tt(e){var t=+(e=="e"),n=t?1:-1,r=I/3;return"M"+.5*n+","+r+"A6,6 0 0 "+t+" "+6.5*n+","+(r+6)+"V"+(2*r-6)+"A6,6 0 0 "+t+" "+.5*n+","+2*r+"Z"+"M"+2.5*n+","+(r+8)+"V"+(2*r-8)+"M"+4.5*n+","+(r+8)+"V"+(2*r-8)}function nt(){h.empty()||h.extent(x),Y.data([h.empty()?k.domain():x]).each(function(e,t){var n=k(e[0])-k.range()[0],r=k.range()[1]-k(e[1]);d3.select(this).select(".left").attr("width",n<0?0:n),d3.select(this).select(".right").attr("x",k(e[1])).attr("width",r<0?0:r)})}function rt(){x=h.empty()?null:h.extent(),S=h.empty()?k.domain():h.extent(),D.brush({extent:S,brush:h}),nt(),r.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),t.width(j).height(F).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var n=$.select(".nv-focus .nv-barsWrap").datum(R.length?R.map(function(e,t){return{key:e.key,values:e.values.filter(function(e,t){return r.x()(e,t)>=S[0]&&r.x()(e,t)<=S[1]})}}):[{values:[]}]),i=$.select(".nv-focus .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U.map(function(e,n){return{key:e.key,values:e.values.filter(function(e,n){return t.x()(e,n)>=S[0]&&t.x()(e,n)<=S[1]})}}));R.length?C=r.xScale():C=t.xScale(),s.scale(C).ticks(j/100).tickSize(-F,0),s.domain([Math.ceil(S[0]),Math.floor(S[1])]),$.select(".nv-x.nv-axis").call(s),n.call(r),i.call(t),$.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L.range()[0]+")"),u.scale(L).ticks(F/36).tickSize(-j,0),$.select(".nv-focus .nv-y1.nv-axis").style("opacity",R.length?1:0),a.scale(A).ticks(F/36).tickSize(R.length?0:-j,0),$.select(".nv-focus .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+C.range()[1]+",0)"),$.select(".nv-focus .nv-y1.nv-axis").call(u),$.select(".nv-focus .nv-y2.nv-axis").call(a)}var N=d3.select(this),P=this,j=(v||parseInt(N.style("width"))||960)-p.left-p.right,F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g,I=g-d.top-d.bottom;B.update=function(){N.call(B)},B.container=this;if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=N.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",p.left+j/2).attr("y",p.top+F/2).text(function(e){return e}),B}N.selectAll(".nv-noData").remove();var R=e.filter(function(e){return!e.disabled&&e.bar}),U=e.filter(function(e){return!e.bar});C=r.xScale(),k=o.scale(),L=r.yScale(),A=t.yScale(),O=i.yScale(),M=n.yScale();var z=e.filter(function(e){return!e.disabled&&e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})}),W=e.filter(function(e){return!e.disabled&&!e.bar}).map(function(e){return e.values.map(function(e,t){return{x:y(e,t),y:b(e,t)}})});C.range([0,j]),k.domain(d3.extent(d3.merge(z.concat(W)),function(e){return e.x})).range([0,j]);var X=N.selectAll("g.nv-wrap.nv-linePlusBar").data([e]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),$=X.select("g");V.append("g").attr("class","nv-legendWrap");var J=V.append("g").attr("class","nv-focus");J.append("g").attr("class","nv-x nv-axis"),J.append("g").attr("class","nv-y1 nv-axis"),J.append("g").attr("class","nv-y2 nv-axis"),J.append("g").attr("class","nv-barsWrap"),J.append("g").attr("class","nv-linesWrap");var K=V.append("g").attr("class","nv-context");K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y1 nv-axis"),K.append("g").attr("class","nv-y2 nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-linesWrap"),K.append("g").attr("class","nv-brushBackground"),K.append("g").attr("class","nv-x nv-brush"),E&&(c.width(j/2),$.select(".nv-legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.bar?" (left axis)":" (right axis)"),e})).call(c),p.top!=c.height()&&(p.top=c.height(),F=(m||parseInt(N.style("height"))||400)-p.top-p.bottom-g),$.select(".nv-legendWrap").attr("transform","translate("+j/2+","+ -p.top+")")),X.attr("transform","translate("+p.left+","+p.top+")"),i.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&e[n].bar})),n.width(j).height(I).color(e.map(function(e,t){return e.color||w(e,t)}).filter(function(t,n){return!e[n].disabled&&!e[n].bar}));var Q=$.select(".nv-context .nv-barsWrap").datum(R.length?R:[{values:[]}]),G=$.select(".nv-context .nv-linesWrap").datum(U[0].disabled?[{values:[]}]:U);$.select(".nv-context").attr("transform","translate(0,"+(F+p.bottom+d.top)+")"),Q.call(i),G.call(n),h.x(k).on("brush",rt),x&&h.extent(x);var Y=$.select(".nv-brushBackground").selectAll("g").data([x||h.extent()]),Z=Y.enter().append("g");Z.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",I),Z.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",I);var et=$.select(".nv-x.nv-brush").call(h);et.selectAll("rect").attr("height",I),et.selectAll(".resize").append("path").attr("d",tt),o.ticks(j/100).tickSize(-I,0),$.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+O.range()[0]+")"),$.select(".nv-context .nv-x.nv-axis").call(o),f.scale(O).ticks(I/36).tickSize(-j,0),$.select(".nv-context .nv-y1.nv-axis").style("opacity",R.length?1:0).attr("transform","translate(0,"+k.range()[0]+")"),$.select(".nv-context .nv-y1.nv-axis").call(f),l.scale(M).ticks(I/36).tickSize(R.length?0:-j,0),$.select(".nv-context .nv-y2.nv-axis").style("opacity",U.length?1:0).attr("transform","translate("+k.range()[1]+",0)"),$.select(".nv-context .nv-y2.nv-axis").call(l),c.dispatch.on("stateChange",function(e){B.update()}),D.on("tooltipShow",function(e){T&&H(e,P.parentNode)}),rt()}),B}var t=e.models.line(),n=e.models.line(),r=e.models.historicalBar(),i=e.models.historicalBar(),s=e.models.axis(),o=e.models.axis(),u=e.models.axis(),a=e.models.axis(),f=e.models.axis(),l=e.models.axis(),c=e.models.legend(),h=d3.svg.brush(),p={top:30,right:30,bottom:30,left:60},d={top:0,right:30,bottom:20,left:60},v=null,m=null,g=100,y=function(e){return e.x},b=function(e){return e.y},w=e.utils.defaultColor(),E=!0,S,x=null,T=!0,N=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},C,k,L,A,O,M,_="No Data Available.",D=d3.dispatch("tooltipShow","tooltipHide","brush"),P=0;t.clipEdge(!0),n.interactive(!1),s.orient("bottom").tickPadding(5),u.orient("left"),a.orient("right"),o.orient("bottom").tickPadding(5),f.orient("left"),l.orient("right");var H=function(n,r){S&&(n.pointIndex+=Math.ceil(S[0]));var i=n.pos[0]+(r.offsetLeft||0),o=n.pos[1]+(r.offsetTop||0),f=s.tickFormat()(t.x()(n.point,n.pointIndex)),l=(n.series.bar?u:a).tickFormat()(t.y()(n.point,n.pointIndex)),c=N(n.series.key,f,l,n,B);e.tooltip.show([i,o],c,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),r.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+p.left,e.pos[1]+p.top],D.tooltipShow(e)}),r.dispatch.on("elementMouseout.tooltip",function(e){D.tooltipHide(e)}),D.on("tooltipHide",function(){T&&e.tooltip.cleanup()}),B.dispatch=D,B.legend=c,B.lines=t,B.lines2=n,B.bars=r,B.bars2=i,B.xAxis=s,B.x2Axis=o,B.y1Axis=u,B.y2Axis=a,B.y3Axis=f,B.y4Axis=l,d3.rebind(B,t,"defined","size","clipVoronoi","interpolate"),B.options=e.utils.optionsFunc.bind(B),B.x=function(e){return arguments.length?(y=e,t.x(e),r.x(e),B):y},B.y=function(e){return arguments.length?(b=e,t.y(e),r.y(e),B):b},B.margin=function(e){return arguments.length?(p.top=typeof e.top!="undefined"?e.top:p.top,p.right=typeof e.right!="undefined"?e.right:p.right,p.bottom=typeof e.bottom!="undefined"?e.bottom:p.bottom,p.left=typeof e.left!="undefined"?e.left:p.left,B):p},B.width=function(e){return arguments.length?(v=e,B):v},B.height=function(e){return arguments.length?(m=e,B):m},B.color=function(t){return arguments.length?(w=e.utils.getColor(t),c.color(w),B):w},B.showLegend=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(T=e,B):T},B.tooltipContent=function(e){return arguments.length?(N=e,B):N},B.noData=function(e){return arguments.length?(_=e,B):_},B.brushExtent=function(e){return arguments.length?(x=e,B):x},B},e.models.multiBar=function(){function C(e){return e.each(function(e){var g=n-t.left-t.right,C=r-t.top-t.bottom,k=d3.select(this);d&&e.length&&(d=[{values:e[0].values.map(function(e){return{x:e.x,y:0,series:e.series,size:.01}})}]),c&&(e=d3.layout.stack().offset(h).values(function(e){return e.values}).y(a)(!e.length&&d?d:e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),c&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i,i-=t.size):(t.y1=t.size+r,r+=t.size)})});var L=y&&b?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});i.domain(y||d3.merge(L).map(function(e){return e.x})).rangeBands(w||[0,g],S),s.domain(b||d3.extent(d3.merge(L).map(function(e){return c?e.y>0?e.y1:e.y1+e.y:e.y}).concat(f))).range(E||[C,0]),i.domain()[0]===i.domain()[1]&&(i.domain()[0]?i.domain([i.domain()[0]-i.domain()[0]*.01,i.domain()[1]+i.domain()[1]*.01]):i.domain([-1,1])),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]+s.domain()[0]*.01,s.domain()[1]-s.domain()[1]*.01]):s.domain([-1,1])),T=T||i,N=N||s;var A=k.selectAll("g.nv-wrap.nv-multibar").data([e]),O=A.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),M=O.append("defs"),_=O.append("g"),D=A.select("g");_.append("g").attr("class","nv-groups"),A.attr("transform","translate("+t.left+","+t.top+")"),M.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),A.select("#nv-edge-clip-"+o+" rect").attr("width",g).attr("height",C),D.attr("clip-path",l?"url(#nv-edge-clip-"+o+")":"");var P=A.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});P.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),P.exit().selectAll("rect.nv-bar").attr("y",function(e){return c?N(e.y0):N(0)}).attr("height",0).remove(),P.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return p(e,t)}).style("stroke",function(e,t){return p(e,t)}),P.style("stroke-opacity",1).style("fill-opacity",.75);var H=P.selectAll("rect.nv-bar").data(function(t){return d&&!e.length?d.values:t.values});H.exit().remove();var B=H.enter().append("rect").attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("x",function(t,n,r){return c?0:r*i.rangeBand()/e.length}).attr("y",function(e){return N(c?e.y0:0)}).attr("height",0).attr("width",i.rangeBand()/(c?1:e.length)).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"});H.style("fill",function(e,t,n){return p(e,n,t)}).style("stroke",function(e,t,n){return p(e,n,t)}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[i(u(t,n))+i.rangeBand()*(c?e.length/2:t.series+.5)/e.length,s(a(t,n)+(c?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(e,t){return"translate("+i(u(e,t))+",0)"}),v&&(m||(m=e.map(function(){return!0})),H.style("fill",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(v(e,t)).darker(m.map(function(e,t){return t}).filter(function(e,t){return!m[t]})[n]).toString()})),c?H.attr("y",function(e,t){return s(c?e.y1:0)}).attr("height",function(e,t){return Math.max(Math.abs(s(e.y+(c?e.y0:0))-s(c?e.y0:0)),1)}).attr("x",function(t,n){return c?0:t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/(c?1:e.length)):H.attr("x",function(t,n){return t.series*i.rangeBand()/e.length}).attr("width",i.rangeBand()/e.length).attr("y",function(e,t){return a(e,t)<0?s(0):s(0)-s(a(e,t))<1?s(0)-1:s(a(e,t))||0}).attr("height",function(e,t){return Math.max(Math.abs(s(a(e,t))-s(0)),1)||0}),T=i.copy(),N=s.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=d3.scale.ordinal(),s=d3.scale.linear(),o=Math.floor(Math.random()*1e4),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=!0,c=!1,h="zero",p=e.utils.defaultColor(),d=!1,v=null,m,g=1200,y,b,w,E,S=.1,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(i=e,C):i},C.yScale=function(e){return arguments.length?(s=e,C):s},C.xDomain=function(e){return arguments.length?(y=e,C):y},C.yDomain=function(e){return arguments.length?(b=e,C):b},C.xRange=function(e){return arguments.length?(w=e,C):w},C.yRange=function(e){return arguments.length?(E=e,C):E},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(c=e,C):c},C.stackOffset=function(e){return arguments.length?(h=e,C):h},C.clipEdge=function(e){return arguments.length?(l=e,C):l},C.color=function(t){return arguments.length?(p=e.utils.getColor(t),C):p},C.barColor=function(t){return arguments.length?(v=e.utils.getColor(t),C):v},C.disabled=function(e){return arguments.length?(m=e,C):m},C.id=function(e){return arguments.length?(o=e,C):o},C.hideable=function(e){return arguments.length?(d=e,C):d},C.delay=function(e){return arguments.length?(g=e,C):g},C.groupSpacing=function(e){return arguments.length?(S=e,C):S},C},e.models.multiBarChart=function(){function A(e){return e.each(function(e){var b=d3.select(this),k=this,O=(u||parseInt(b.style("width"))||960)-o.left-o.right,M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom;A.update=function(){b.call(A)},A.container=this,S.disabled=e.map(function(e){return!!e.disabled});if(!x){var _;x={};for(_ in S)S[_]instanceof Array?x[_]=S[_].slice(0):x[_]=S[_]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var D=b.selectAll(".nv-noData").data([T]);return D.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),D.attr("x",o.left+O/2).attr("y",o.top+M/2).text(function(e){return e}),A}b.selectAll(".nv-noData").remove(),w=t.xScale(),E=t.yScale();var P=b.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([e]),H=P.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),B=P.select("g");H.append("g").attr("class","nv-x nv-axis"),H.append("g").attr("class","nv-y nv-axis"),H.append("g").attr("class","nv-barsWrap"),H.append("g").attr("class","nv-legendWrap"),H.append("g").attr("class","nv-controlsWrap"),c&&(i.width(O-C()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),B.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),M=(a||parseInt(b.style("height"))||400)-o.top-o.bottom),B.select(".nv-legendWrap").attr("transform","translate("+C()+","+ -o.top+")"));if(l){var j=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(C()).color(["#444","#444","#444"]),B.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -o.top+")").call(s)}P.attr("transform","translate("+o.left+","+o.top+")"),d&&B.select(".nv-y.nv-axis").attr("transform","translate("+O+",0)"),t.disabled(e.map(function(e){return e.disabled})).width(O).height(M).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var F=B.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));F.call(t);if(h){n.scale(w).ticks(O/100).tickSize(-M,0),B.select(".nv-x.nv-axis").attr("transform","translate(0,"+E.range()[0]+")"),B.select(".nv-x.nv-axis").call(n);var I=B.select(".nv-x.nv-axis > g").selectAll("g");I.selectAll("line, text").style("opacity",1);if(m){var q=function(e,t){return"translate("+e+","+t+")"},R=5,U=17;I.selectAll("text").attr("transform",function(e,t,n){return q(0,n%2==0?R:U)});var z=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;B.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(e,t){return q(0,t===0||z%2!==0?U:R)})}v&&I.filter(function(t,n){return n%Math.ceil(e[0].values.length/(O/100))!==0}).selectAll("text, line").style("opacity",0),g&&I.selectAll(".tick text").attr("transform","rotate("+g+" 0,0)").style("text-anchor",g>0?"start":"end"),B.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}p&&(r.scale(E).ticks(M/36).tickSize(-O,0),B.select(".nv-y.nv-axis").call(r)),i.dispatch.on("stateChange",function(e){S=e,N.stateChange(S),A.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;j=j.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}S.stacked=t.stacked(),N.stateChange(S),A.update()}),N.on("tooltipShow",function(e){y&&L(e,k.parentNode)}),N.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),S.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),S.stacked=n.stacked),A.update()})}),A}var t=e.models.multiBar(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=!1,g=0,y=!0,b=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},w,E,S={stacked:!1},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=function(){return l?180:0},k=0;t.stacked(!1),n.orient("bottom").tickPadding(7).highlightZero(!0).showMaxMin(!1).tickFormat(function(e){return e}),r.orient(d?"right":"left").tickFormat(d3.format(",.1f")),s.updateState(!1);var L=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=b(i.series.key,a,f,i,A);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],N.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){y&&e.tooltip.cleanup()}),A.dispatch=N,A.multibar=t,A.legend=i,A.xAxis=n,A.yAxis=r,d3.rebind(A,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","stacked","stackOffset","delay","barColor","groupSpacing"),A.options=e.utils.optionsFunc.bind(A),A.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,A):o},A.width=function(e){return arguments.length?(u=e,A):u},A.height=function(e){return arguments.length?(a=e,A):a},A.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),A):f},A.showControls=function(e){return arguments.length?(l=e,A):l},A.showLegend=function(e){return arguments.length?(c=e,A):c},A.showXAxis=function(e){return arguments.length?(h=e,A):h},A.showYAxis=function(e){return arguments.length?(p=e,A):p},A.rightAlignYAxis=function(e){return arguments.length?(d=e,r.orient(e?"right":"left"),A):d},A.reduceXTicks=function(e){return arguments.length?(v=e,A):v},A.rotateLabels=function(e){return arguments.length?(g=e,A):g},A.staggerLabels=function(e){return arguments.length?(m=e,A):m},A.tooltip=function(e){return arguments.length?(b=e,A):b},A.tooltips=function(e){return arguments.length?(y=e,A):y},A.tooltipContent=function(e){return arguments.length?(b=e,A):b},A.state=function(e){return arguments.length?(S=e,A):S},A.defaultState=function(e){return arguments.length?(x=e,A):x},A.noData=function(e){return arguments.length?(T=e,A):T},A.transitionDuration=function(e){return arguments.length?(k=e,A):k},A},e.models.multiBarHorizontal=function(){function C(e){return e.each(function(e){var i=n-t.left-t.right,y=r-t.top-t.bottom,C=d3.select(this);p&&(e=d3.layout.stack().offset("zero").values(function(e){return e.values}).y(a)(e)),e.forEach(function(e,t){e.values.forEach(function(e){e.series=t})}),p&&e[0].values.map(function(t,n){var r=0,i=0;e.map(function(e){var t=e.values[n];t.size=Math.abs(t.y),t.y<0?(t.y1=i-t.size,i-=t.size):(t.y1=r,r+=t.size)})});var k=b&&w?[]:e.map(function(e){return e.values.map(function(e,t){return{x:u(e,t),y:a(e,t),y0:e.y0,y1:e.y1}})});s.domain(b||d3.merge(k).map(function(e){return e.x})).rangeBands(E||[0,y],.1),o.domain(w||d3.extent(d3.merge(k).map(function(e){return p?e.y>0?e.y1+e.y:e.y1:e.y}).concat(f))),d&&!p?o.range(S||[o.domain()[0]<0?m:0,i-(o.domain()[1]>0?m:0)]):o.range(S||[0,i]),T=T||s,N=N||d3.scale.linear().domain(o.domain()).range([o(0),o(0)]);var L=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([e]),A=L.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),O=A.append("defs"),M=A.append("g"),_=L.select("g");M.append("g").attr("class","nv-groups"),L.attr("transform","translate("+t.left+","+t.top+")");var D=L.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e,t){return t});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}).style("fill",function(e,t){return l(e,t)}).style("stroke",function(e,t){return l(e,t)}),D.style("stroke-opacity",1).style("fill-opacity",.75);var P=D.selectAll("g.nv-bar").data(function(e){return e.values});P.exit().remove();var H=P.enter().append("g").attr("transform",function(t,n,r){return"translate("+N(p?t.y0:0)+","+(p?0:r*s.rangeBand()/e.length+s(u(t,n)))+")"});H.append("rect").attr("width",0).attr("height",s.rangeBand()/(p?1:e.length)),P.on("mouseover",function(t,n){d3.select(this).classed("hover",!0),x.elementMouseover({value:a(t,n),point:t,series:e[t.series],pos:[o(a(t,n)+(p?t.y0:0)),s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),x.elementMouseout({value:a(t,n),point:t,series:e[t.series],pointIndex:n,seriesIndex:t.series,e:d3.event})}).on("click",function(t,n){x.elementClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}).on("dblclick",function(t,n){x.elementDblClick({value:a(t,n),point:t,series:e[t.series],pos:[s(u(t,n))+s.rangeBand()*(p?e.length/2:t.series+.5)/e.length,o(a(t,n)+(p?t.y0:0))],pointIndex:n,seriesIndex:t.series,e:d3.event}),d3.event.stopPropagation()}),H.append("text"),d&&!p?(P.select("text").attr("text-anchor",function(e,t){return a(e,t)<0?"end":"start"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return g(a(e,t))}),P.select("text").attr("x",function(e,t){return a(e,t)<0?-4:o(a(e,t))-o(0)+4})):P.selectAll("text").text(""),v&&!p?(H.append("text").classed("nv-bar-label",!0),P.select("text.nv-bar-label").attr("text-anchor",function(e,t){return a(e,t)<0?"start":"end"}).attr("y",s.rangeBand()/(e.length*2)).attr("dy",".32em").text(function(e,t){return u(e,t)}),P.select("text.nv-bar-label").attr("x",function(e,t){return a(e,t)<0?o(0)-o(a(e,t))+4:-4})):P.selectAll("text.nv-bar-label").text(""),P.attr("class",function(e,t){return a(e,t)<0?"nv-bar negative":"nv-bar positive"}),c&&(h||(h=e.map(function(){return!0})),P.style("fill",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()}).style("stroke",function(e,t,n){return d3.rgb(c(e,t)).darker(h.map(function(e,t){return t}).filter(function(e,t){return!h[t]})[n]).toString()})),p?P.attr("transform",function(e,t){return"translate("+o(e.y1)+","+s(u(e,t))+")"}).select("rect").attr("width",function(e,t){return Math.abs(o(a(e,t)+e.y0)-o(e.y0))}).attr("height",s.rangeBand()):P.attr("transform",function(t,n){return"translate("+(a(t,n)<0?o(a(t,n)):o(0))+","+(t.series*s.rangeBand()/e.length+s(u(t,n)))+")"}).select("rect").attr("height",s.rangeBand()/e.length).attr("width",function(e,t){return Math.max(Math.abs(o(a(e,t))-o(0)),1)}),T=s.copy(),N=o.copy()}),C}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.ordinal(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=[0],l=e.utils.defaultColor(),c=null,h,p=!1,d=!1,v=!1,m=60,g=d3.format(",.2f"),y=1200,b,w,E,S,x=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout"),T,N;return C.dispatch=x,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(u=e,C):u},C.y=function(e){return arguments.length?(a=e,C):a},C.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,C):t},C.width=function(e){return arguments.length?(n=e,C):n},C.height=function(e){return arguments.length?(r=e,C):r},C.xScale=function(e){return arguments.length?(s=e,C):s},C.yScale=function(e){return arguments.length?(o=e,C):o},C.xDomain=function(e){return arguments.length?(b=e,C):b},C.yDomain=function(e){return arguments.length?(w=e,C):w},C.xRange=function(e){return arguments.length?(E=e,C):E},C.yRange=function(e){return arguments.length?(S=e,C):S},C.forceY=function(e){return arguments.length?(f=e,C):f},C.stacked=function(e){return arguments.length?(p=e,C):p},C.color=function(t){return arguments.length?(l=e.utils.getColor(t),C):l},C.barColor=function(t){return arguments.length?(c=e.utils.getColor(t),C):c},C.disabled=function(e){return arguments.length?(h=e,C):h},C.id=function(e){return arguments.length?(i=e,C):i},C.delay=function(e){return arguments.length?(y=e,C):y},C.showValues=function(e){return arguments.length?(d=e,C):d},C.showBarLabels=function(e){return arguments.length?(v=e,C):v},C.valueFormat=function(e){return arguments.length?(g=e,C):g},C.valuePadding=function(e){return arguments.length?(m=e,C):m},C},e.models.multiBarHorizontalChart=function(){function C(e){return e.each(function(e){var d=d3.select(this),m=this,T=(u||parseInt(d.style("width"))||960)-o.left-o.right,k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom;C.update=function(){d.call(C)},C.container=this,b.disabled=e.map(function(e){return!!e.disabled});if(!w){var L;w={};for(L in b)b[L]instanceof Array?w[L]=b[L].slice(0):w[L]=b[L]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var A=d.selectAll(".nv-noData").data([E]);return A.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),A.attr("x",o.left+T/2).attr("y",o.top+k/2).text(function(e){return e}),C}d.selectAll(".nv-noData").remove(),g=t.xScale(),y=t.yScale();var O=d.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([e]),M=O.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),_=O.select("g");M.append("g").attr("class","nv-x nv-axis"),M.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),M.append("g").attr("class","nv-barsWrap"),M.append("g").attr("class","nv-legendWrap"),M.append("g").attr("class","nv-controlsWrap"),c&&(i.width(T-x()),t.barColor()&&e.forEach(function(e,t){e.color=d3.rgb("#ccc").darker(t*1.5).toString()}),_.select(".nv-legendWrap").datum(e).call(i),o.top!=i.height()&&(o.top=i.height(),k=(a||parseInt(d.style("height"))||400)-o.top-o.bottom),_.select(".nv-legendWrap").attr("transform","translate("+x()+","+ -o.top+")"));if(l){var D=[{key:"Grouped",disabled:t.stacked()},{key:"Stacked",disabled:!t.stacked()}];s.width(x()).color(["#444","#444","#444"]),_.select(".nv-controlsWrap").datum(D).attr("transform","translate(0,"+ -o.top+")").call(s)}O.attr("transform","translate("+o.left+","+o.top+")"),t.disabled(e.map(function(e){return e.disabled})).width(T).height(k).color(e.map(function(e,t){return e.color||f(e,t)}).filter(function(t,n){return!e[n].disabled}));var P=_.select(".nv-barsWrap").datum(e.filter(function(e){return!e.disabled}));P.call(t);if(h){n.scale(g).ticks(k/24).tickSize(-T,0),_.select(".nv-x.nv-axis").call(n);var H=_.select(".nv-x.nv-axis").selectAll("g");H.selectAll("line, text")}p&&(r.scale(y).ticks(T/100).tickSize(-k,0),_.select(".nv-y.nv-axis").attr("transform","translate(0,"+k+")"),_.select(".nv-y.nv-axis").call(r)),_.select(".nv-zeroLine line").attr("x1",y(0)).attr("x2",y(0)).attr("y1",0).attr("y2",-k),i.dispatch.on("stateChange",function(e){b=e,S.stateChange(b),C.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;D=D.map(function(e){return e.disabled=!0,e}),e.disabled=!1;switch(e.key){case"Grouped":t.stacked(!1);break;case"Stacked":t.stacked(!0)}b.stacked=t.stacked(),S.stateChange(b),C.update()}),S.on("tooltipShow",function(e){v&&N(e,m.parentNode)}),S.on("changeState",function(n){typeof n.disabled!="undefined"&&(e.forEach(function(e,t){e.disabled=n.disabled[t]}),b.disabled=n.disabled),typeof n.stacked!="undefined"&&(t.stacked(n.stacked),b.stacked=n.stacked),C.update()})}),C}var t=e.models.multiBarHorizontal(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend().height(30),s=e.models.legend().height(30),o={top:30,right:20,bottom:50,left:60},u=null,a=null,f=e.utils.defaultColor(),l=!0,c=!0,h=!0,p=!0,d=!1,v=!0,m=function(e,t,n,r,i){return"<h3>"+e+" - "+t+"</h3>"+"<p>"+n+"</p>"},g,y,b={stacked:d},w=null,E="No Data Available.",S=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),x=function(){return l?180:0},T=0;t.stacked(d),n.orient("left").tickPadding(5).highlightZero(!1).showMaxMin(!1).tickFormat(function(e){return e}),r.orient("bottom").tickFormat(d3.format(",.1f")),s.updateState(!1);var N=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=m(i.series.key,a,f,i,C);e.tooltip.show([o,u],l,i.value<0?"e":"w",null,s)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+o.left,e.pos[1]+o.top],S.tooltipShow(e)}),t.dispatch.on("elementMouseout.tooltip",function(e){S.tooltipHide(e)}),S.on("tooltipHide",function(){v&&e.tooltip.cleanup()}),C.dispatch=S,C.multibar=t,C.legend=i,C.xAxis=n,C.yAxis=r,d3.rebind(C,t,"x","y","xDomain","yDomain","xRange","yRange","forceX","forceY","clipEdge","id","delay","showValues","showBarLabels","valueFormat","stacked","barColor"),C.options=e.utils.optionsFunc.bind(C),C.margin=function(e){return arguments.length?(o.top=typeof e.top!="undefined"?e.top:o.top,o.right=typeof e.right!="undefined"?e.right:o.right,o.bottom=typeof e.bottom!="undefined"?e.bottom:o.bottom,o.left=typeof e.left!="undefined"?e.left:o.left,C):o},C.width=function(e){return arguments.length?(u=e,C):u},C.height=function(e){return arguments.length?(a=e,C):a},C.color=function(t){return arguments.length?(f=e.utils.getColor(t),i.color(f),C):f},C.showControls=function(e){return arguments.length?(l=e,C):l},C.showLegend=function(e){return arguments.length?(c=e,C):c},C.showXAxis=function(e){return arguments.length?(h=e,C):h},C.showYAxis=function(e){return arguments.length?(p=e,C):p},C.tooltip=function(e){return arguments.length?(m=e,C):m},C.tooltips=function(e){return arguments.length?(v=e,C):v},C.tooltipContent=function(e){return arguments.length?(m=e,C):m},C.state=function(e){return arguments.length?(b=e,C):b},C.defaultState=function(e){return arguments.length?(w=e,C):w},C.noData=function(e){return arguments.length?(E=e,C):E},C.transitionDuration=function(e){return arguments.length?(T=e,C):T},C},e.models.multiChart=function(){function C(e){return e.each(function(e){var u=d3.select(this),f=this;C.update=function(){u.call(C)},C.container=this;var k=(r||parseInt(u.style("width"))||960)-t.left-t.right,L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom,A=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==1}),O=e.filter(function(e){return!e.disabled&&e.type=="line"&&e.yAxis==2}),M=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==1}),_=e.filter(function(e){return!e.disabled&&e.type=="bar"&&e.yAxis==2}),D=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==1}),P=e.filter(function(e){return!e.disabled&&e.type=="area"&&e.yAxis==2}),H=e.filter(function(e){return!e.disabled&&e.yAxis==1}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})}),B=e.filter(function(e){return!e.disabled&&e.yAxis==2}).map(function(e){return e.values.map(function(e,t){return{x:e.x,y:e.y}})});a.domain(d3.extent(d3.merge(H.concat(B)),function(e){return e.x})).range([0,k]);var j=u.selectAll("g.wrap.multiChart").data([e]),F=j.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");F.append("g").attr("class","x axis"),F.append("g").attr("class","y1 axis"),F.append("g").attr("class","y2 axis"),F.append("g").attr("class","lines1Wrap"),F.append("g").attr("class","lines2Wrap"),F.append("g").attr("class","bars1Wrap"),F.append("g").attr("class","bars2Wrap"),F.append("g").attr("class","stack1Wrap"),F.append("g").attr("class","stack2Wrap"),F.append("g").attr("class","legendWrap");var I=j.select("g");s&&(x.width(k/2),I.select(".legendWrap").datum(e.map(function(e){return e.originalKey=e.originalKey===undefined?e.key:e.originalKey,e.key=e.originalKey+(e.yAxis==1?"":" (right axis)"),e})).call(x),t.top!=x.height()&&(t.top=x.height(),L=(i||parseInt(u.style("height"))||400)-t.top-t.bottom),I.select(".legendWrap").attr("transform","translate("+k/2+","+ -t.top+")")),d.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="line"})),v.width(k).height(L).interpolate("monotone").color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="line"})),m.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="bar"})),g.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="bar"})),y.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==1&&e[n].type=="area"})),b.width(k).height(L).color(e.map(function(e,t){return e.color||n[t%n.length]}).filter(function(t,n){return!e[n].disabled&&e[n].yAxis==2&&e[n].type=="area"})),I.attr("transform","translate("+t.left+","+t.top+")");var q=I.select(".lines1Wrap").datum(A),R=I.select(".bars1Wrap").datum(M),U=I.select(".stack1Wrap").datum(D),z=I.select(".lines2Wrap").datum(O),W=I.select(".bars2Wrap").datum(_),X=I.select(".stack2Wrap").datum(P),V=D.length?D.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[],$=P.length?P.map(function(e){return e.values}).reduce(function(e,t){return e.map(function(e,n){return{x:e.x,y:e.y+t[n].y}})}).concat([{x:0,y:0}]):[];h.domain(l||d3.extent(d3.merge(H).concat(V),function(e){return e.y})).range([0,L]),p.domain(c||d3.extent(d3.merge(B).concat($),function(e){return e.y})).range([0,L]),d.yDomain(h.domain()),m.yDomain(h.domain()),y.yDomain(h.domain()),v.yDomain(p.domain()),g.yDomain(p.domain()),b.yDomain(p.domain()),D.length&&d3.transition(U).call(y),P.length&&d3.transition(X).call(b),M.length&&d3.transition(R).call(m),_.length&&d3.transition(W).call(g),A.length&&d3.transition(q).call(d),O.length&&d3.transition(z).call(v),w.ticks(k/100).tickSize(-L,0),I.select(".x.axis").attr("transform","translate(0,"+L+")"),d3.transition(I.select(".x.axis")).call(w),E.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y1.axis")).call(E),S.ticks(L/36).tickSize(-k,0),d3.transition(I.select(".y2.axis")).call(S),I.select(".y2.axis").style("opacity",B.length?1:0).attr("transform","translate("+a.range()[1]+",0)"),x.dispatch.on("stateChange",function(e){C.update()}),T.on("tooltipShow",function(e){o&&N(e,f.parentNode)})}),C}var t={top:30,right:20,bottom:50,left:60},n=d3.scale.category20().range(),r=null,i=null,s=!0,o=!0,u=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" at "+t+"</p>"},a,f,l,c,a=d3.scale.linear(),h=d3.scale.linear(),p=d3.scale.linear(),d=e.models.line().yScale(h),v=e.models.line().yScale(p),m=e.models.multiBar().stacked(!1).yScale(h),g=e.models.multiBar().stacked(!1).yScale(p),y=e.models.stackedArea().yScale(h),b=e.models.stackedArea().yScale(p),w=e.models.axis().scale(a).orient("bottom").tickPadding(5),E=e.models.axis().scale(h).orient("left"),S=e.models.axis().scale(p).orient("right"),x=e.models.legend().height(30),T=d3.dispatch("tooltipShow","tooltipHide"),N=function(t,n){var r=t.pos[0]+(n.offsetLeft||0),i=t.pos[1]+(n.offsetTop||0),s=w.tickFormat()(d.x()(t.point,t.pointIndex)),o=(t.series.yAxis==2?S:E).tickFormat()(d.y()(t.point,t.pointIndex)),a=u(t.series.key,s,o,t,C);e.tooltip.show([r,i],a,undefined,undefined,n.offsetParent)};return d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),m.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),m.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),g.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),g.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),y.dispatch.on("tooltipShow",function(e){if(!Math.round(y.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),y.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),b.dispatch.on("tooltipShow",function(e){if(!Math.round(b.y()(e.point)*100))return setTimeout(function(){d3.selectAll(".point.hover").classed("hover",!1)},0),!1;e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),b.dispatch.on("tooltipHide",function(e){T.tooltipHide(e)}),d.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),d.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],T.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){T.tooltipHide(e)}),T.on("tooltipHide",function(){o&&e.tooltip.cleanup()}),C.dispatch=T,C.lines1=d,C.lines2=v,C.bars1=m,C.bars2=g,C.stack1=y,C.stack2=b,C.xAxis=w,C.yAxis1=E,C.yAxis2=S,C.options=e.utils.optionsFunc.bind(C),C.x=function(e){return arguments.length?(getX=e,d.x(e),m.x(e),C):getX},C.y=function(e){return arguments.length?(getY=e,d.y(e),m.y(e),C):getY},C.yDomain1=function(e){return arguments.length?(l=e,C):l},C.yDomain2=function(e){return arguments.length?(c=e,C):c},C.margin=function(e){return arguments.length?(t=e,C):t},C.width=function(e){return arguments.length?(r=e,C):r},C.height=function(e){return arguments.length?(i=e,C):i},C.color=function(e){return arguments.length?(n=e,x.color(e),C):n},C.showLegend=function(e){return arguments.length?(s=e,C):s},C.tooltips=function(e){return arguments.length?(o=e,C):o},C.tooltipContent=function(e){return arguments.length?(u=e,C):u},C},e.models.ohlcBar=function(){function x(e){return e.each(function(e){var g=n-t.left-t.right,x=r-t.top-t.bottom,T=d3.select(this);s.domain(y||d3.extent(e[0].values.map(u).concat(p))),v?s.range(w||[g*.5/e[0].values.length,g*(e[0].values.length-.5)/e[0].values.length]):s.range(w||[0,g]),o.domain(b||[d3.min(e[0].values.map(h).concat(d)),d3.max(e[0].values.map(c).concat(d))]).range(E||[x,0]),s.domain()[0]===s.domain()[1]&&(s.domain()[0]?s.domain([s.domain()[0]-s.domain()[0]*.01,s.domain()[1]+s.domain()[1]*.01]):s.domain([-1,1])),o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]+o.domain()[0]*.01,o.domain()[1]-o.domain()[1]*.01]):o.domain([-1,1]));var N=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([e[0].values]),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),k=C.append("defs"),L=C.append("g"),A=N.select("g");L.append("g").attr("class","nv-ticks"),N.attr("transform","translate("+t.left+","+t.top+")"),T.on("click",function(e,t){S.chartClick({data:e,index:t,pos:d3.event,id:i})}),k.append("clipPath").attr("id","nv-chart-clip-path-"+i).append("rect"),N.select("#nv-chart-clip-path-"+i+" rect").attr("width",g).attr("height",x),A.attr("clip-path",m?"url(#nv-chart-clip-path-"+i+")":"");var O=N.select(".nv-ticks").selectAll(".nv-tick").data(function(e){return e});O.exit().remove();var M=O.enter().append("path").attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"}).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).on("mouseover",function(t,n){d3.select(this).classed("hover",!0),S.elementMouseover({point:t,series:e[0],pos:[s(u(t,n)),o(a(t,n))],pointIndex:n,seriesIndex:0,e:d3.event})}).on("mouseout",function(t,n){d3.select(this).classed("hover",!1),S.elementMouseout({point:t,series:e[0],pointIndex:n,seriesIndex:0,e:d3.event})}).on("click",function(e,t){S.elementClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()}).on("dblclick",function(e,t){S.elementDblClick({value:a(e,t),data:e,index:t,pos:[s(u(e,t)),o(a(e,t))],e:d3.event,id:i}),d3.event.stopPropagation()});O.attr("class",function(e,t,n){return(f(e,t)>l(e,t)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+n+"-"+t}),d3.transition(O).attr("transform",function(e,t){return"translate("+s(u(e,t))+","+o(c(e,t))+")"}).attr("d",function(t,n){var r=g/e[0].values.length*.9;return"m0,0l0,"+(o(f(t,n))-o(c(t,n)))+"l"+ -r/2+",0l"+r/2+",0l0,"+(o(h(t,n))-o(f(t,n)))+"l0,"+(o(l(t,n))-o(h(t,n)))+"l"+r/2+",0l"+ -r/2+",0z"})}),x}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=Math.floor(Math.random()*1e4),s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=function(e){return e.open},l=function(e){return e.close},c=function(e){return e.high},h=function(e){return e.low},p=[],d=[],v=!1,m=!0,g=e.utils.defaultColor(),y,b,w,E,S=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return x.dispatch=S,x.options=e.utils.optionsFunc.bind(x),x.x=function(e){return arguments.length?(u=e,x):u},x.y=function(e){return arguments.length?(a=e,x):a},x.open=function(e){return arguments.length?(f=e,x):f},x.close=function(e){return arguments.length?(l=e,x):l},x.high=function(e){return arguments.length?(c=e,x):c},x.low=function(e){return arguments.length?(h=e,x):h},x.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,x):t},x.width=function(e){return arguments.length?(n=e,x):n},x.height=function(e){return arguments.length?(r=e,x):r},x.xScale=function(e){return arguments.length?(s=e,x):s},x.yScale=function(e){return arguments.length?(o=e,x):o},x.xDomain=function(e){return arguments.length?(y=e,x):y},x.yDomain=function(e){return arguments.length?(b=e,x):b},x.xRange=function(e){return arguments.length?(w=e,x):w},x.yRange=function(e){return arguments.length?(E=e,x):E},x.forceX=function(e){return arguments.length?(p=e,x):p},x.forceY=function(e){return arguments.length?(d=e,x):d},x.padData=function(e){return arguments.length?(v=e,x):v},x.clipEdge=function(e){return arguments.length?(m=e,x):m},x.color=function(t){return arguments.length?(g=e.utils.getColor(t),x):g},x.id=function(e){return arguments.length?(i=e,x):i},x},e.models.pie=function(){function S(e){return e.each(function(e){function q(e){var t=(e.startAngle+e.endAngle)*90/Math.PI-90;return t>90?t-180:t}function R(e){e.endAngle=isNaN(e.endAngle)?0:e.endAngle,e.startAngle=isNaN(e.startAngle)?0:e.startAngle,m||(e.innerRadius=0);var t=d3.interpolate(this._current,e);return this._current=t(0),function(e){return A(t(e))}}function U(e){e.innerRadius=0;var t=d3.interpolate({startAngle:0,endAngle:0},e);return function(e){return A(t(e))}}var o=n-t.left-t.right,f=r-t.top-t.bottom,S=Math.min(o,f)/2,x=S-S/5,T=d3.select(this),N=T.selectAll(".nv-wrap.nv-pie").data(e),C=N.enter().append("g").attr("class","nvd3 nv-wrap nv-pie nv-chart-"+u),k=C.append("g"),L=N.select("g");k.append("g").attr("class","nv-pie"),k.append("g").attr("class","nv-pieLabels"),N.attr("transform","translate("+t.left+","+t.top+")"),L.select(".nv-pie").attr("transform","translate("+o/2+","+f/2+")"),L.select(".nv-pieLabels").attr("transform","translate("+o/2+","+f/2+")"),T.on("click",function(e,t){E.chartClick({data:e,index:t,pos:d3.event,id:u})});var A=d3.svg.arc().outerRadius(x);y&&A.startAngle(y),b&&A.endAngle(b),m&&A.innerRadius(S*w);var O=d3.layout.pie().sort(null).value(function(e){return e.disabled?0:s(e)}),M=N.select(".nv-pie").selectAll(".nv-slice").data(O),_=N.select(".nv-pieLabels").selectAll(".nv-label").data(O);M.exit().remove(),_.exit().remove();var D=M.enter().append("g").attr("class","nv-slice").on("mouseover",function(e,t){d3.select(this).classed("hover",!0),E.elementMouseover({label:i(e.data),value:s(e.data),point:e.data,pointIndex:t,pos:[d3.event.pageX,d3.event.pageY],id:u})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),E.elementMouseout({label:i(e.data),value:s(e.data),point:e.data,index:t,id:u})}).on("click",function(e,t){E.elementClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()}).on("dblclick",function(e,t){E.elementDblClick({label:i(e.data),value:s(e.data),point:e.data,index:t,pos:d3.event,id:u}),d3.event.stopPropagation()});M.attr("fill",function(e,t){return a(e,t)}).attr("stroke",function(e,t){return a(e,t)});var P=D.append("path").each(function(e){this._current=e});M.select("path").attr("d",A);if(l){var H=d3.svg.arc().innerRadius(0);c&&(H=A),h&&(H=d3.svg.arc().outerRadius(A.outerRadius())),_.enter().append("g").classed("nv-label",!0).each(function(e,t){var n=d3.select(this);n.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}return e.outerRadius=S+10,e.innerRadius=S+15,"translate("+H.centroid(e)+")"}),n.append("rect").style("stroke","#fff").style("fill","#fff").attr("rx",3).attr("ry",3),n.append("text").style("text-anchor",g?(e.startAngle+e.endAngle)/2<Math.PI?"start":"end":"middle").style("fill","#000")});var B={},j=14,F=140,I=function(e){return Math.floor(e[0]/F)*F+","+Math.floor(e[1]/j)*j};_.attr("transform",function(e){if(g){e.outerRadius=x+10,e.innerRadius=x+15;var t=(e.startAngle+e.endAngle)/2*(180/Math.PI);return(e.startAngle+e.endAngle)/2<Math.PI?t-=90:t+=90,"translate("+H.centroid(e)+") rotate("+t+")"}e.outerRadius=S+10,e.innerRadius=S+15;var n=H.centroid(e),r=I(n);return B[r]&&(n[1]-=j),B[I(n)]=!0,"translate("+n+")"}),_.select(".nv-label text").style("text-anchor",g?(d.startAngle+d.endAngle)/2<Math.PI?"start":"end":"middle").text(function(e,t){var n=(e.endAngle-e.startAngle)/(2*Math.PI),r={key:i(e.data),value:s(e.data),percent:d3.format("%")(n)};return e.value&&n>v?r[p]:""})}}),S}var t={top:0,right:0,bottom:0,left:0},n=500,r=500,i=function(e){return e.x},s=function(e){return e.y},o=function(e){return e.description},u=Math.floor(Math.random()*1e4),a=e.utils.defaultColor(),f=d3.format(",.2f"),l=!0,c=!0,h=!1,p="key",v=.02,m=!1,g=!1,y=!1,b=!1,w=.5,E=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout");return S.dispatch=E,S.options=e.utils.optionsFunc.bind(S),S.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,S):t},S.width=function(e){return arguments.length?(n=e,S):n},S.height=function(e){return arguments.length?(r=e,S):r},S.values=function(t){return e.log("pie.values() is no longer supported."),S},S.x=function(e){return arguments.length?(i=e,S):i},S.y=function(e){return arguments.length?(s=d3.functor(e),S):s},S.description=function(e){return arguments.length?(o=e,S):o},S.showLabels=function(e){return arguments.length?(l=e,S):l},S.labelSunbeamLayout=function(e){return arguments.length?(g=e,S):g},S.donutLabelsOutside=function(e){return arguments.length?(h=e,S):h},S.pieLabelsOutside=function(e){return arguments.length?(c=e,S):c},S.labelType=function(e){return arguments.length?(p=e,p=p||"key",S):p},S.donut=function(e){return arguments.length?(m=e,S):m},S.donutRatio=function(e){return arguments.length?(w=e,S):w},S.startAngle=function(e){return arguments.length?(y=e,S):y},S.endAngle=function(e){return arguments.length?(b=e,S):b},S.id=function(e){return arguments.length?(u=e,S):u},S.color=function(t){return arguments.length?(a=e.utils.getColor(t),S):a},S.valueFormat=function(e){return arguments.length?(f=e,S):f},S.labelThreshold=function(e){return arguments.length?(v=e,S):v},S},e.models.pieChart=function(){function v(e){return e.each(function(e){var u=d3.select(this),a=this,f=(i||parseInt(u.style("width"))||960)-r.left-r.right,d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom;v.update=function(){u.call(v)},v.container=this,l.disabled=e.map(function(e){return!!e.disabled});if(!c){var m;c={};for(m in l)l[m]instanceof Array?c[m]=l[m].slice(0):c[m]=l[m]}if(!e||!e.length){var g=u.selectAll(".nv-noData").data([h]);return g.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),g.attr("x",r.left+f/2).attr("y",r.top+d/2).text(function(e){return e}),v}u.selectAll(".nv-noData").remove();var y=u.selectAll("g.nv-wrap.nv-pieChart").data([e]),b=y.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),w=y.select("g");b.append("g").attr("class","nv-pieWrap"),b.append("g").attr("class","nv-legendWrap"),o&&(n.width(f).key(t.x()),y.select(".nv-legendWrap").datum(e).call(n),r.top!=n.height()&&(r.top=n.height(),d=(s||parseInt(u.style("height"))||400)-r.top-r.bottom),y.select(".nv-legendWrap").attr("transform","translate(0,"+ -r.top+")")),y.attr("transform","translate("+r.left+","+r.top+")"),t.width(f).height(d);var E=w.select(".nv-pieWrap").datum([e]);d3.transition(E).call(t),n.dispatch.on("stateChange",function(e){l=e,p.stateChange(l),v.update()}),t.dispatch.on("elementMouseout.tooltip",function(e){p.tooltipHide(e)}),p.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),l.disabled=t.disabled),v.update()})}),v}var t=e.models.pie(),n=e.models.legend(),r={top:30,right:20,bottom:20,left:20},i=null,s=null,o=!0,u=e.utils.defaultColor(),a=!0,f=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+t+"</p>"},l={},c=null,h="No Data Available.",p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),d=function(n,r){var i=t.description()(n.point)||t.x()(n.point),s=n.pos[0]+(r&&r.offsetLeft||0),o=n.pos[1]+(r&&r.offsetTop||0),u=t.valueFormat()(t.y()(n.point)),a=f(i,u,n,v);e.tooltip.show([s,o],a,n.value<0?"n":"s",null,r)};return t.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+r.left,e.pos[1]+r.top],p.tooltipShow(e)}),p.on("tooltipShow",function(e){a&&d(e)}),p.on("tooltipHide",function(){a&&e.tooltip.cleanup()}),v.legend=n,v.dispatch=p,v.pie=t,d3.rebind(v,t,"valueFormat","values","x","y","description","id","showLabels","donutLabelsOutside","pieLabelsOutside","labelType","donut","donutRatio","labelThreshold"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(r.top=typeof e.top!="undefined"?e.top:r.top,r.right=typeof e.right!="undefined"?e.right:r.right,r.bottom=typeof e.bottom!="undefined"?e.bottom:r.bottom,r.left=typeof e.left!="undefined"?e.left:r.left,v):r},v.width=function(e){return arguments.length?(i=e,v):i},v.height=function(e){return arguments.length?(s=e,v):s},v.color=function(r){return arguments.length?(u=e.utils.getColor(r),n.color(u),t.color(u),v):u},v.showLegend=function(e){return arguments.length?(o=e,v):o},v.tooltips=function(e){return arguments.length?(a=e,v):a},v.tooltipContent=function(e){return arguments.length?(f=e,v):f},v.state=function(e){return arguments.length?(l=e,v):l},v.defaultState=function(e){return arguments.length?(c=e,v):c},v.noData=function(e){return arguments.length?(h=e,v):h},v},e.models.scatter=function(){function I(q){return q.each(function(I){function Q(){if(!g)return!1;var e,i=d3.merge(I.map(function(e,t){return e.values.map(function(e,n){var r=f(e,n),i=l(e,n);return[o(r)+Math.random()*1e-7,u(i)+Math.random()*1e-7,t,n,e]}).filter(function(e,t){return b(e[4],t)})}));if(D===!0){if(x){var a=X.select("defs").selectAll(".nv-point-clips").data([s]).enter();a.append("clipPath").attr("class","nv-point-clips").attr("id","nv-points-clip-"+s);var c=X.select("#nv-points-clip-"+s).selectAll("circle").data(i);c.enter().append("circle").attr("r",T),c.exit().remove(),c.attr("cx",function(e){return e[0]}).attr("cy",function(e){return e[1]}),X.select(".nv-point-paths").attr("clip-path","url(#nv-points-clip-"+s+")")}i.length&&(i.push([o.range()[0]-20,u.range()[0]-20,null,null]),i.push([o.range()[1]+20,u.range()[1]+20,null,null]),i.push([o.range()[0]-20,u.range()[0]+20,null,null]),i.push([o.range()[1]+20,u.range()[1]-20,null,null]));var h=d3.geom.polygon([[-10,-10],[-10,r+10],[n+10,r+10],[n+10,-10]]),p=d3.geom.voronoi(i).map(function(e,t){return{data:h.clip(e),series:i[t][2],point:i[t][3]}}),d=X.select(".nv-point-paths").selectAll("path").data(p);d.enter().append("path").attr("class",function(e,t){return"nv-path-"+t}),d.exit().remove(),d.attr("d",function(e){return e.data.length===0?"M 0 0":"M"+e.data.join("L")+"Z"});var v=function(e,n){if(F)return 0;var r=I[e.series];if(typeof r=="undefined")return;var i=r.values[e.point];n({point:i,series:r,pos:[o(f(i,e.point))+t.left,u(l(i,e.point))+t.top],seriesIndex:e.series,pointIndex:e.point})};d.on("click",function(e){v(e,_.elementClick)}).on("mouseover",function(e){v(e,_.elementMouseover)}).on("mouseout",function(e,t){v(e,_.elementMouseout)})}else X.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementClick({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseover",function(e,n){if(F||!I[e.series])return 0;var r=I[e.series],i=r.values[n];_.elementMouseover({point:i,series:r,pos:[o(f(i,n))+t.left,u(l(i,n))+t.top],seriesIndex:e.series,pointIndex:n})}).on("mouseout",function(e,t){if(F||!I[e.series])return 0;var n=I[e.series],r=n.values[t];_.elementMouseout({point:r,series:n,seriesIndex:e.series,pointIndex:t})});F=!1}var q=n-t.left-t.right,R=r-t.top-t.bottom,U=d3.select(this);I.forEach(function(e,t){e.values.forEach(function(e){e.series=t})});var W=N&&C&&A?[]:d3.merge(I.map(function(e){return e.values.map(function(e,t){return{x:f(e,t),y:l(e,t),size:c(e,t)}})}));o.domain(N||d3.extent(W.map(function(e){return e.x}).concat(d))),w&&I[0]?o.range(k||[(q*E+q)/(2*I[0].values.length),q-q*(1+E)/(2*I[0].values.length)]):o.range(k||[0,q]),u.domain(C||d3.extent(W.map(function(e){return e.y}).concat(v))).range(L||[R,0]),a.domain(A||d3.extent(W.map(function(e){return e.size}).concat(m))).range(O||[16,256]);if(o.domain()[0]===o.domain()[1]||u.domain()[0]===u.domain()[1])M=!0;o.domain()[0]===o.domain()[1]&&(o.domain()[0]?o.domain([o.domain()[0]-o.domain()[0]*.01,o.domain()[1]+o.domain()[1]*.01]):o.domain([-1,1])),u.domain()[0]===u.domain()[1]&&(u.domain()[0]?u.domain([u.domain()[0]-u.domain()[0]*.01,u.domain()[1]+u.domain()[1]*.01]):u.domain([-1,1])),isNaN(o.domain()[0])&&o.domain([-1,1]),isNaN(u.domain()[0])&&u.domain([-1,1]),P=P||o,H=H||u,B=B||a;var X=U.selectAll("g.nv-wrap.nv-scatter").data([I]),V=X.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+s+(M?" nv-single-point":"")),$=V.append("defs"),J=V.append("g"),K=X.select("g");J.append("g").attr("class","nv-groups"),J.append("g").attr("class","nv-point-paths"),X.attr("transform","translate("+t.left+","+t.top+")"),$.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),X.select("#nv-edge-clip-"+s+" rect").attr("width",q).attr("height",R>0?R:0),K.attr("clip-path",S?"url(#nv-edge-clip-"+s+")":""),F=!0;var G=X.select(".nv-groups").selectAll(".nv-group").data(function(e){return e},function(e){return e.key});G.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),G.exit().remove(),G.attr("class",function(e,t){return"nv-group nv-series-"+t}).classed("hover",function(e){return e.hover}),G.style("fill",function(e,t){return i(e,t)}).style("stroke",function(e,t){return i(e,t)}).style("stroke-opacity",1).style("fill-opacity",.5);if(p){var Y=G.selectAll("circle.nv-point").data(function(e){return e.values},y);Y.enter().append("circle").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("cx",function(t,n){return e.utils.NaNtoZero(P(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(H(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)}),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("cx",function(t,n){return e.utils.NaNtoZero(o(f(t,n)))}).attr("cy",function(t,n){return e.utils.NaNtoZero(u(l(t,n)))}).attr("r",function(e,t){return Math.sqrt(a(c(e,t))/Math.PI)})}else{var Y=G.selectAll("path.nv-point").data(function(e){return e.values});Y.enter().append("path").style("fill",function(e,t){return e.color}).style("stroke",function(e,t){return e.color}).attr("transform",function(e,t){return"translate("+P(f(e,t))+","+H(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))})),Y.exit().remove(),G.exit().selectAll("path.nv-point").attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).remove(),Y.each(function(e,t){d3.select(this).classed("nv-point",!0).classed("nv-point-"+t,!0).classed("hover",!1)}),Y.attr("transform",function(e,t){return"translate("+o(f(e,t))+","+u(l(e,t))+")"}).attr("d",d3.svg.symbol().type(h).size(function(e,t){return a(c(e,t))}))}clearTimeout(j),j=setTimeout(Q,300),P=o.copy(),H=u.copy(),B=a.copy()}),I}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=d3.scale.linear(),u=d3.scale.linear(),a=d3.scale.linear(),f=function(e){return e.x},l=function(e){return e.y},c=function(e){return e.size||1},h=function(e){return e.shape||"circle"},p=!0,d=[],v=[],m=[],g=!0,y=null,b=function(e){return!e.notActive},w=!1,E=.1,S=!1,x=!0,T=function(){return 25},N=null,C=null,k=null,L=null,A=null,O=null,M=!1,_=d3.dispatch("elementClick","elementMouseover","elementMouseout"),D=!0,P,H,B,j,F=!1;return I.clearHighlights=function(){d3.selectAll(".nv-chart-"+s+" .nv-point.hover").classed("hover",!1)},I.highlightPoint=function(e,t,n){d3.select(".nv-chart-"+s+" .nv-series-"+e+" .nv-point-"+t).classed("hover",n)},_.on("elementMouseover.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!0)}),_.on("elementMouseout.point",function(e){g&&I.highlightPoint(e.seriesIndex,e.pointIndex,!1)}),I.dispatch=_,I.options=e.utils.optionsFunc.bind(I),I.x=function(e){return arguments.length?(f=d3.functor(e),I):f},I.y=function(e){return arguments.length?(l=d3.functor(e),I):l},I.size=function(e){return arguments.length?(c=d3.functor(e),I):c},I.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,I):t},I.width=function(e){return arguments.length?(n=e,I):n},I.height=function(e){return arguments.length?(r=e,I):r},I.xScale=function(e){return arguments.length?(o=e,I):o},I.yScale=function(e){return arguments.length?(u=e,I):u},I.zScale=function(e){return arguments.length?(a=e,I):a},I.xDomain=function(e){return arguments.length?(N=e,I):N},I.yDomain=function(e){return arguments.length?(C=e,I):C},I.sizeDomain=function(e){return arguments.length?(A=e,I):A},I.xRange=function(e){return arguments.length?(k=e,I):k},I.yRange=function(e){return arguments.length?(L=e,I):L},I.sizeRange=function(e){return arguments.length?(O=e,I):O},I.forceX=function(e){return arguments.length?(d=e,I):d},I.forceY=function(e){return arguments.length?(v=e,I):v},I.forceSize=function(e){return arguments.length?(m=e,I):m},I.interactive=function(e){return arguments.length?(g=e,I):g},I.pointKey=function(e){return arguments.length?(y=e,I):y},I.pointActive=function(e){return arguments.length?(b=e,I):b},I.padData=function(e){return arguments.length?(w=e,I):w},I.padDataOuter=function(e){return arguments.length?(E=e,I):E},I.clipEdge=function(e){return arguments.length?(S=e,I):S},I.clipVoronoi=function(e){return arguments.length?(x=e,I):x},I.useVoronoi=function(e){return arguments.length?(D=e,D===!1&&(x=!1),I):D},I.clipRadius=function(e){return arguments.length?(T=e,I):T},I.color=function(t){return arguments.length?(i=e.utils.getColor(t),I):i},I.shape=function(e){return arguments.length?(h=e,I):h},I.onlyCircles=function(e){return arguments.length?(p=e,I):p},I.id=function(e){return arguments.length?(s=e,I):s},I.singlePoint=function(e){return arguments.length?(M=e,I):M},I},e.models.scatterChart=function(){function F(e){return e.each(function(e){function J(){if(T)return W.select(".nv-point-paths").style("pointer-events","all"),!1;W.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(x).focus(i[0]),p.distortion(x).focus(i[1]),W.select(".nv-scatterWrap").call(t),b&&W.select(".nv-x.nv-axis").call(n),w&&W.select(".nv-y.nv-axis").call(r),W.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),W.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var C=d3.select(this),k=this,L=(f||parseInt(C.style("width"))||960)-a.left-a.right,D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom;F.update=function(){C.call(F)},F.container=this,A.disabled=e.map(function(e){return!!e.disabled});if(!O){var I;O={};for(I in A)A[I]instanceof Array?O[I]=A[I].slice(0):O[I]=A[I]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var q=C.selectAll(".nv-noData").data([_]);return q.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),q.attr("x",a.left+L/2).attr("y",a.top+D/2).text(function(e){return e}),F}C.selectAll(".nv-noData").remove(),P=P||h,H=H||p;var R=C.selectAll("g.nv-wrap.nv-scatterChart").data([e]),U=R.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),z=U.append("g"),W=R.select("g");z.append("rect").attr("class","nvd3 nv-background"),z.append("g").attr("class","nv-x nv-axis"),z.append("g").attr("class","nv-y nv-axis"),z.append("g").attr("class","nv-scatterWrap"),z.append("g").attr("class","nv-distWrap"),z.append("g").attr("class","nv-legendWrap"),z.append("g").attr("class","nv-controlsWrap");if(y){var X=S?L/2:L;i.width(X),R.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),D=(l||parseInt(C.style("height"))||400)-a.top-a.bottom),R.select(".nv-legendWrap").attr("transform","translate("+(L-X)+","+ -a.top+")")}S&&(s.width(180).color(["#444"]),W.select(".nv-controlsWrap").datum(j).attr("transform","translate(0,"+ -a.top+")").call(s)),R.attr("transform","translate("+a.left+","+a.top+")"),E&&W.select(".nv-y.nv-axis").attr("transform","translate("+L+",0)"),t.width(L).height(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),d!==0&&t.xDomain(null),v!==0&&t.yDomain(null),R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t);if(d!==0){var V=h.domain()[1]-h.domain()[0];t.xDomain([h.domain()[0]-d*V,h.domain()[1]+d*V])}if(v!==0){var $=p.domain()[1]-p.domain()[0];t.yDomain([p.domain()[0]-v*$,p.domain()[1]+v*$])}(v!==0||d!==0)&&R.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),b&&(n.scale(h).ticks(n.ticks()&&n.ticks().length?n.ticks():L/100).tickSize(-D,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),w&&(r.scale(p).ticks(r.ticks()&&r.ticks().length?r.ticks():D/36).tickSize(-L,0),W.select(".nv-y.nv-axis").call(r)),m&&(o.getData(t.x()).scale(h).width(L).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),W.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),g&&(u.getData(t.y()).scale(p).width(D).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),z.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),W.select(".nv-distributionY").attr("transform","translate("+(E?L:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(W.select(".nv-background").attr("width",L).attr("height",D),W.select(".nv-background").on("mousemove",J),W.select(".nv-background").on("click",function(){T=!T}),t.dispatch.on("elementClick.freezeFisheye",function(){T=!T})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,x=e.disabled?0:2.5,W.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),W.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(x).focus(0),p.distortion(x).focus(0),W.select(".nv-scatterWrap").call(t),W.select(".nv-x.nv-axis").call(n),W.select(".nv-y.nv-axis").call(r)):T=!1,F.update()}),i.dispatch.on("stateChange",function(e){A.disabled=e.disabled,M.stateChange(A),F.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",function(t,n){return e.pos[1]-D}),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],M.tooltipShow(e)}),M.on("tooltipShow",function(e){N&&B(e,k.parentNode)}),M.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),A.disabled=t.disabled),F.update()}),P=h.copy(),H=p.copy()}),F}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=0,v=0,m=!1,g=!1,y=!0,b=!0,w=!0,E=!1,S=!!d3.fisheye,x=0,T=!1,N=!0,C=function(e,t,n){return"<strong>"+t+"</strong>"},k=function(e,t,n){return"<strong>"+n+"</strong>"},L=null,A={},O=null,M=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),_="No Data Available.",D=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(E?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var P,H,B=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));C!=null&&e.tooltip.show([f,l],C(i.series.key,v,m,i,F),"n",1,s,"x-nvtooltip"),k!=null&&e.tooltip.show([c,d],k(i.series.key,v,m,i,F),"e",1,s,"y-nvtooltip"),L!=null&&e.tooltip.show([o,u],L(i.series.key,v,m,i,F),i.value<0?"n":"s",null,s)},j=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){M.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),M.on("tooltipHide",function(){N&&e.tooltip.cleanup()}),F.dispatch=M,F.scatter=t,F.legend=i,F.controls=s,F.xAxis=n,F.yAxis=r,F.distX=o,F.distY=u,d3.rebind(F,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),F.options=e.utils.optionsFunc.bind(F),F.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,F):a},F.width=function(e){return arguments.length?(f=e,F):f},F.height=function(e){return arguments.length?(l=e,F):l},F.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),F):c},F.showDistX=function(e){return arguments.length?(m=e,F):m},F.showDistY=function(e){return arguments.length?(g=e,F):g},F.showControls=function(e){return arguments.length?(S=e,F):S},F.showLegend=function(e){return arguments.length?(y=e,F):y},F.showXAxis=function(e){return arguments.length?(b=e,F):b},F.showYAxis=function(e){return arguments.length?(w=e,F):w},F.rightAlignYAxis=function(e){return arguments.length?(E=e,r.orient(e?"right":"left"),F):E},F.fisheye=function(e){return arguments.length?(x=e,F):x},F.xPadding=function(e){return arguments.length?(d=e,F):d},F.yPadding=function(e){return arguments.length?(v=e,F):v},F.tooltips=function(e){return arguments.length?(N=e,F):N},F.tooltipContent=function(e){return arguments.length?(L=e,F):L},F.tooltipXContent=function(e){return arguments.length?(C=e,F):C},F.tooltipYContent=function(e){return arguments.length?(k=e,F):k},F.state=function(e){return arguments.length?(A=e,F):A},F.defaultState=function(e){return arguments.length?(O=e,F):O},F.noData=function(e){return arguments.length?(_=e,F):_},F.transitionDuration=function(e){return arguments.length?(D=e,F):D},F},e.models.scatterPlusLineChart=function(){function B(e){return e.each(function(e){function V(){if(S)return U.select(".nv-point-paths").style("pointer-events","all"),!1;U.select(".nv-point-paths").style("pointer-events","none");var i=d3.mouse(this);h.distortion(E).focus(i[0]),p.distortion(E).focus(i[1]),U.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),g&&U.select(".nv-x.nv-axis").call(n),y&&U.select(".nv-y.nv-axis").call(r),U.select(".nv-distributionX").datum(e.filter(function(e){return!e.disabled})).call(o),U.select(".nv-distributionY").datum(e.filter(function(e){return!e.disabled})).call(u)}var T=d3.select(this),N=this,C=(f||parseInt(T.style("width"))||960)-a.left-a.right,M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom;B.update=function(){T.call(B)},B.container=this,k.disabled=e.map(function(e){return!!e.disabled});if(!L){var j;L={};for(j in k)k[j]instanceof Array?L[j]=k[j].slice(0):L[j]=k[j]}if(!e||!e.length||!e.filter(function(e){return e.values.length}).length){var F=T.selectAll(".nv-noData").data([O]);return F.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),F.attr("x",a.left+C/2).attr("y",a.top+M/2).text(function(e){return e}),B}T.selectAll(".nv-noData").remove(),h=t.xScale(),p=t.yScale(),_=_||h,D=D||p;var I=T.selectAll("g.nv-wrap.nv-scatterChart").data([e]),q=I.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+t.id()),R=q.append("g"),U=I.select("g");R.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-scatterWrap"),R.append("g").attr("class","nv-regressionLinesWrap"),R.append("g").attr("class","nv-distWrap"),R.append("g").attr("class","nv-legendWrap"),R.append("g").attr("class","nv-controlsWrap"),I.attr("transform","translate("+a.left+","+a.top+")"),b&&U.select(".nv-y.nv-axis").attr("transform","translate("+C+",0)"),m&&(i.width(C/2),I.select(".nv-legendWrap").datum(e).call(i),a.top!=i.height()&&(a.top=i.height(),M=(l||parseInt(T.style("height"))||400)-a.top-a.bottom),I.select(".nv-legendWrap").attr("transform","translate("+C/2+","+ -a.top+")")),w&&(s.width(180).color(["#444"]),U.select(".nv-controlsWrap").datum(H).attr("transform","translate(0,"+ -a.top+")").call(s)),t.width(C).height(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),I.select(".nv-scatterWrap").datum(e.filter(function(e){return!e.disabled})).call(t),I.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+t.id()+")");var z=I.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(e){return e});z.enter().append("g").attr("class","nv-regLines");var W=z.selectAll(".nv-regLine").data(function(e){return[e]}),X=W.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0);W.attr("x1",h.range()[0]).attr("x2",h.range()[1]).attr("y1",function(e,t){return p(h.domain()[0]*e.slope+e.intercept)}).attr("y2",function(e,t){return p(h.domain()[1]*e.slope+e.intercept)}).style("stroke",function(e,t,n){return c(e,n)}).style("stroke-opacity",function(e,t){return e.disabled||typeof e.slope=="undefined"||typeof e.intercept=="undefined"?0:1}),g&&(n.scale(h).ticks(n.ticks()?n.ticks():C/100).tickSize(-M,0),U.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(n)),y&&(r.scale(p).ticks(r.ticks()?r.ticks():M/36).tickSize(-C,0),U.select(".nv-y.nv-axis").call(r)),d&&(o.getData(t.x()).scale(h).width(C).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),U.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(e.filter(function(e){return!e.disabled})).call(o)),v&&(u.getData(t.y()).scale(p).width(M).color(e.map(function(e,t){return e.color||c(e,t)}).filter(function(t,n){return!e[n].disabled})),R.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),U.select(".nv-distributionY").attr("transform","translate("+(b?C:-u.size())+",0)").datum(e.filter(function(e){return!e.disabled})).call(u)),d3.fisheye&&(U.select(".nv-background").attr("width",C).attr("height",M),U.select(".nv-background").on("mousemove",V),U.select(".nv-background").on("click",function(){S=!S}),t.dispatch.on("elementClick.freezeFisheye",function(){S=!S})),s.dispatch.on("legendClick",function(e,i){e.disabled=!e.disabled,E=e.disabled?0:2.5,U.select(".nv-background").style("pointer-events",e.disabled?"none":"all"),U.select(".nv-point-paths").style("pointer-events",e.disabled?"all":"none"),e.disabled?(h.distortion(E).focus(0),p.distortion(E).focus(0),U.select(".nv-scatterWrap").call(t),U.select(".nv-x.nv-axis").call(n),U.select(".nv-y.nv-axis").call(r)):S=!1,B.update()}),i.dispatch.on("stateChange",function(e){k=e,A.stateChange(k),B.update()}),t.dispatch.on("elementMouseover.tooltip",function(e){d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",e.pos[1]-M),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",e.pos[0]+o.size()),e.pos=[e.pos[0]+a.left,e.pos[1]+a.top],A.tooltipShow(e)}),A.on("tooltipShow",function(e){x&&P(e,N.parentNode)}),A.on("changeState",function(t){typeof t.disabled!="undefined"&&(e.forEach(function(e,n){e.disabled=t.disabled[n]}),k.disabled=t.disabled),B.update()}),_=h.copy(),D=p.copy()}),B}var t=e.models.scatter(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.models.distribution(),u=e.models.distribution(),a={top:30,right:20,bottom:50,left:75},f=null,l=null,c=e.utils.defaultColor(),h=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.xScale(),p=d3.fisheye?d3.fisheye.scale(d3.scale.linear).distortion(0):t.yScale(),d=!1,v=!1,m=!0,g=!0,y=!0,b=!1,w=!!d3.fisheye,E=0,S=!1,x=!0,T=function(e,t,n){return"<strong>"+t+"</strong>"},N=function(e,t,n){return"<strong>"+n+"</strong>"},C=function(e,t,n,r){return"<h3>"+e+"</h3>"+"<p>"+r+"</p>"},k={},L=null,A=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),O="No Data Available.",M=0;t.xScale(h).yScale(p),n.orient("bottom").tickPadding(10),r.orient(b?"right":"left").tickPadding(10),o.axis("x"),u.axis("y"),s.updateState(!1);var _,D,P=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),f=i.pos[0]+(s.offsetLeft||0),l=p.range()[0]+a.top+(s.offsetTop||0),c=h.range()[0]+a.left+(s.offsetLeft||0),d=i.pos[1]+(s.offsetTop||0),v=n.tickFormat()(t.x()(i.point,i.pointIndex)),m=r.tickFormat()(t.y()(i.point,i.pointIndex));T!=null&&e.tooltip.show([f,l],T(i.series.key,v,m,i,B),"n",1,s,"x-nvtooltip"),N!=null&&e.tooltip.show([c,d],N(i.series.key,v,m,i,B),"e",1,s,"y-nvtooltip"),C!=null&&e.tooltip.show([o,u],C(i.series.key,v,m,i.point.tooltip,i,B),i.value<0?"n":"s",null,s)},H=[{key:"Magnify",disabled:!0}];return t.dispatch.on("elementMouseout.tooltip",function(e){A.tooltipHide(e),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-distx-"+e.pointIndex).attr("y1",0),d3.select(".nv-chart-"+t.id()+" .nv-series-"+e.seriesIndex+" .nv-disty-"+e.pointIndex).attr("x2",u.size())}),A.on("tooltipHide",function(){x&&e.tooltip.cleanup()}),B.dispatch=A,B.scatter=t,B.legend=i,B.controls=s,B.xAxis=n,B.yAxis=r,B.distX=o,B.distY=u,d3.rebind(B,t,"id","interactive","pointActive","x","y","shape","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","sizeRange","forceX","forceY","forceSize","clipVoronoi","clipRadius","useVoronoi"),B.options=e.utils.optionsFunc.bind(B),B.margin=function(e){return arguments.length?(a.top=typeof e.top!="undefined"?e.top:a.top,a.right=typeof e.right!="undefined"?e.right:a.right,a.bottom=typeof e.bottom!="undefined"?e.bottom:a.bottom,a.left=typeof e.left!="undefined"?e.left:a.left,B):a},B.width=function(e){return arguments.length?(f=e,B):f},B.height=function(e){return arguments.length?(l=e,B):l},B.color=function(t){return arguments.length?(c=e.utils.getColor(t),i.color(c),o.color(c),u.color(c),B):c},B.showDistX=function(e){return arguments.length?(d=e,B):d},B.showDistY=function(e){return arguments.length?(v=e,B):v},B.showControls=function(e){return arguments.length?(w=e,B):w},B.showLegend=function(e){return arguments.length?(m=e,B):m},B.showXAxis=function(e){return arguments.length?(g=e,B):g},B.showYAxis=function(e){return arguments.length?(y=e,B):y},B.rightAlignYAxis=function(e){return arguments.length?(b=e,r.orient(e?"right":"left"),B):b},B.fisheye=function(e){return arguments.length?(E=e,B):E},B.tooltips=function(e){return arguments.length?(x=e,B):x},B.tooltipContent=function(e){return arguments.length?(C=e,B):C},B.tooltipXContent=function(e){return arguments.length?(T=e,B):T},B.tooltipYContent=function(e){return arguments.length?(N=e,B):N},B.state=function(e){return arguments.length?(k=e,B):k},B.defaultState=function(e){return arguments.length?(L=e,B):L},B.noData=function(e){return arguments.length?(O=e,B):O},B.transitionDuration=function(e){return arguments.length?(M=e,B):M},B},e.models.sparkline=function(){function d(e){return e.each(function(e){var i=n-t.left-t.right,d=r-t.top-t.bottom,v=d3.select(this);s.domain(l||d3.extent(e,u)).range(h||[0,i]),o.domain(c||d3.extent(e,a)).range(p||[d,0]);var m=v.selectAll("g.nv-wrap.nv-sparkline").data([e]),g=m.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline"),b=g.append("g"),w=m.select("g");m.attr("transform","translate("+t.left+","+t.top+")");var E=m.selectAll("path").data(function(e){return[e]});E.enter().append("path"),E.exit().remove(),E.style("stroke",function(e,t){return e.color||f(e,t)}).attr("d",d3.svg.line().x(function(e,t){return s(u(e,t))}).y(function(e,t){return o(a(e,t))}));var S=m.selectAll("circle.nv-point").data(function(e){function n(t){if(t!=-1){var n=e[t];return n.pointIndex=t,n}return null}var t=e.map(function(e,t){return a(e,t)}),r=n(t.lastIndexOf(o.domain()[1])),i=n(t.indexOf(o.domain()[0])),s=n(t.length-1);return[i,r,s].filter(function(e){return e!=null})});S.enter().append("circle"),S.exit().remove(),S.attr("cx",function(e,t){return s(u(e,e.pointIndex))}).attr("cy",function(e,t){return o(a(e,e.pointIndex))}).attr("r",2).attr("class",function(e,t){return u(e,e.pointIndex)==s.domain()[1]?"nv-point nv-currentValue":a(e,e.pointIndex)==o.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),d}var t={top:2,right:0,bottom:2,left:0},n=400,r=32,i=!0,s=d3.scale.linear(),o=d3.scale.linear(),u=function(e){return e.x},a=function(e){return e.y},f=e.utils.getColor(["#000"]),l,c,h,p;return d.options=e.utils.optionsFunc.bind(d),d.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,d):t},d.width=function(e){return arguments.length?(n=e,d):n},d.height=function(e){return arguments.length?(r=e,d):r},d.x=function(e){return arguments.length?(u=d3.functor(e),d):u},d.y=function(e){return arguments.length?(a=d3.functor(e),d):a},d.xScale=function(e){return arguments.length?(s=e,d):s},d.yScale=function(e){return arguments.length?(o=e,d):o},d.xDomain=function(e){return arguments.length?(l=e,d):l},d.yDomain=function(e){return arguments.length?(c=e,d):c},d.xRange=function(e){return arguments.length?(h=e,d):h},d.yRange=function(e){return arguments.length?(p=e,d):p},d.animate=function(e){return arguments.length?(i=e,d):i},d.color=function(t){return arguments.length?(f=e.utils.getColor(t),d):f},d},e.models.sparklinePlus=function(){function v(e){return e.each(function(c){function O(){if(a)return;var e=C.selectAll(".nv-hoverValue").data(u),r=e.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);e.exit().style("stroke-opacity",0).style("fill-opacity",0).remove(),e.attr("transform",function(e){return"translate("+s(t.x()(c[e],e))+",0)"}).style("stroke-opacity",1).style("fill-opacity",1);if(!u.length)return;r.append("line").attr("x1",0).attr("y1",-n.top).attr("x2",0).attr("y2",b),r.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-n.top).attr("text-anchor","end").attr("dy",".9em"),C.select(".nv-hoverValue .nv-xValue").text(f(t.x()(c[u[0]],u[0]))),r.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-n.top).attr("text-anchor","start").attr("dy",".9em"),C.select(".nv-hoverValue .nv-yValue").text(l(t.y()(c[u[0]],u[0])))}function M(){function r(e,n){var r=Math.abs(t.x()(e[0],0)-n),i=0;for(var s=0;s<e.length;s++)Math.abs(t.x()(e[s],s)-n)<r&&(r=Math.abs(t.x()(e[s],s)-n),i=s);return i}if(a)return;var e=d3.mouse(this)[0]-n.left;u=[r(c,Math.round(s.invert(e)))],O()}var m=d3.select(this),g=(r||parseInt(m.style("width"))||960)-n.left-n.right,b=(i||parseInt(m.style("height"))||400)-n.top-n.bottom;v.update=function(){v(e)},v.container=this;if(!c||!c.length){var w=m.selectAll(".nv-noData").data([d]);return w.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),w.attr("x",n.left+g/2).attr("y",n.top+b/2).text(function(e){return e}),v}m.selectAll(".nv-noData").remove();var E=t.y()(c[c.length-1],c.length-1);s=t.xScale(),o=t.yScale();var S=m.selectAll("g.nv-wrap.nv-sparklineplus").data([c]),T=S.enter().append("g").attr("class","nvd3 nv-wrap nv-sparklineplus"),N=T.append("g"),C=S.select("g");N.append("g").attr("class","nv-sparklineWrap"),N.append("g").attr("class","nv-valueWrap"),N.append("g").attr("class","nv-hoverArea"),S.attr("transform","translate("+n.left+","+n.top+")");var k=C.select(".nv-sparklineWrap");t.width(g).height(b),k.call(t);var L=C.select(".nv-valueWrap"),A=L.selectAll(".nv-currentValue").data([E]);A.enter().append("text").attr("class","nv-currentValue").attr("dx",p?-8:8).attr("dy",".9em").style("text-anchor",p?"end":"start"),A.attr("x",g+(p?n.right:0)).attr("y",h?function(e){return o(e)}:0).style("fill",t.color()(c[c.length-1],c.length-1)).text(l(E)),N.select(".nv-hoverArea").append("rect").on("mousemove",M).on("click",function(){a=!a}).on("mouseout",function(){u=[],O()}),C.select(".nv-hoverArea rect").attr("transform",function(e){return"translate("+ -n.left+","+ -n.top+")"}).attr("width",g+n.left+n.right).attr("height",b+n.top)}),v}var t=e.models.sparkline(),n={top:15,right:100,bottom:10,left:50},r=null,i=null,s,o,u=[],a=!1,f=d3.format(",r"),l=d3.format(",.2f"),c=!0,h=!0,p=!1,d="No Data Available.";return v.sparkline=t,d3.rebind(v,t,"x","y","xScale","yScale","color"),v.options=e.utils.optionsFunc.bind(v),v.margin=function(e){return arguments.length?(n.top=typeof e.top!="undefined"?e.top:n.top,n.right=typeof e.right!="undefined"?e.right:n.right,n.bottom=typeof e.bottom!="undefined"?e.bottom:n.bottom,n.left=typeof e.left!="undefined"?e.left:n.left,v):n},v.width=function(e){return arguments.length?(r=e,v):r},v.height=function(e){return arguments.length?(i=e,v):i},v.xTickFormat=function(e){return arguments.length?(f=e,v):f},v.yTickFormat=function(e){return arguments.length?(l=e,v):l},v.showValue=function(e){return arguments.length?(c=e,v):c},v.alignValue=function(e){return arguments.length?(h=e,v):h},v.rightAlignValue=function(e){return arguments.length?(p=e,v):p},v.noData=function(e){return arguments.length?(d=e,v):d},v},e.models.stackedArea=function(){function g(e){return e.each(function(e){var a=n-t.left-t.right,b=r-t.top-t.bottom,w=d3.select(this);p=v.xScale(),d=v.yScale();var E=e;e.forEach(function(e,t){e.seriesIndex=t,e.values=e.values.map(function(e,n){return e.index=n,e.seriesIndex=t,e})});var S=e.filter(function(e){return!e.disabled});e=d3.layout.stack().order(l).offset(f).values(function(e){return e.values}).x(o).y(u).out(function(e,t,n){var r=u(e)===0?0:n;e.display={y:r,y0:t}})(S);var T=w.selectAll("g.nv-wrap.nv-stackedarea").data([e]),N=T.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedarea"),C=N.append("defs"),k=N.append("g"),L=T.select("g");k.append("g").attr("class","nv-areaWrap"),k.append("g").attr("class","nv-scatterWrap"),T.attr("transform","translate("+t.left+","+t.top+")"),v.width(a).height(b).x(o).y(function(e){return e.display.y+e.display.y0}).forceY([0]).color(e.map(function(e,t){return e.color||i(e,e.seriesIndex)}));var A=L.select(".nv-scatterWrap").datum(e);A.call(v),C.append("clipPath").attr("id","nv-edge-clip-"+s).append("rect"),T.select("#nv-edge-clip-"+s+" rect").attr("width",a).attr("height",b),L.attr("clip-path",h?"url(#nv-edge-clip-"+s+")":"");var O=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y+e.display.y0)}).interpolate(c),M=d3.svg.area().x(function(e,t){return p(o(e,t))}).y0(function(e){return d(e.display.y0)}).y1(function(e){return d(e.display.y0)}),_=L.select(".nv-areaWrap").selectAll("path.nv-area").data(function(e){return e});_.enter().append("path").attr("class",function(e,t){return"nv-area nv-area-"+t}).attr("d",function(e,t){return M(e.values,e.seriesIndex)}).on("mouseover",function(e,t){d3.select(this).classed("hover",!0),m.areaMouseover({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("mouseout",function(e,t){d3.select(this).classed("hover",!1),m.areaMouseout({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}).on("click",function(e,t){d3.select(this).classed("hover",!1),m.areaClick({point:e,series:e.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:e.seriesIndex})}),_.exit().remove(),_.style("fill",function(e,t){return e.color||i(e,e.seriesIndex)}).style("stroke",function(e,t){return e.color||i(e,e.seriesIndex)}),_.attr("d",function(e,t){return O(e.values,t)}),v.dispatch.on("elementMouseover.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!0)}),v.dispatch.on("elementMouseout.area",function(e){L.select(".nv-chart-"+s+" .nv-area-"+e.seriesIndex).classed("hover",!1)}),g.d3_stackedOffset_stackPercent=function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,a=[];for(s=0;s<n;++s){for(i=0,o=0;i<E.length;i++)o+=u(E[i].values[s]);if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)a[s]=0;return a}}),g}var t={top:0,right:0,bottom:0,left:0},n=960,r=500,i=e.utils.defaultColor(),s=Math.floor(Math.random()*1e5),o=function(e){return e.x},u=function(e){return e.y},a="stack",f="zero",l="default",c="linear",h=!1,p,d,v=e.models.scatter(),m=d3.dispatch("tooltipShow","tooltipHide","areaClick","areaMouseover","areaMouseout");return v.size(2.2).sizeDomain([2.2,2.2]),v.dispatch.on("elementClick.area",function(e){m.areaClick(e)}),v.dispatch.on("elementMouseover.tooltip",function(e){e.pos=[e.pos[0]+t.left,e.pos[1]+t.top],m.tooltipShow(e)}),v.dispatch.on("elementMouseout.tooltip",function(e){m.tooltipHide(e)}),g.dispatch=m,g.scatter=v,d3.rebind(g,v,"interactive","size","xScale","yScale","zScale","xDomain","yDomain","xRange","yRange","sizeDomain","forceX","forceY","forceSize","clipVoronoi","useVoronoi","clipRadius","highlightPoint","clearHighlights"),g.options=e.utils.optionsFunc.bind(g),g.x=function(e){return arguments.length?(o=d3.functor(e),g):o},g.y=function(e){return arguments.length?(u=d3.functor(e),g):u},g.margin=function(e){return arguments.length?(t.top=typeof e.top!="undefined"?e.top:t.top,t.right=typeof e.right!="undefined"?e.right:t.right,t.bottom=typeof e.bottom!="undefined"?e.bottom:t.bottom,t.left=typeof e.left!="undefined"?e.left:t.left,g):t},g.width=function(e){return arguments.length?(n=e,g):n},g.height=function(e){return arguments.length?(r=e,g):r},g.clipEdge=function(e){return arguments.length?(h=e,g):h},g.color=function(t){return arguments.length?(i=e.utils.getColor(t),g):i},g.offset=function(e){return arguments.length?(f=e,g):f},g.order=function(e){return arguments.length?(l=e,g):l},g.style=function(e){if(!arguments.length)return a;a=e;switch(a){case"stack":g.offset("zero"),g.order("default");break;case"stream":g.offset("wiggle"),g.order("inside-out");break;case"stream-center":g.offset("silhouette"),g.order("inside-out");break;case"expand":g.offset("expand"),g.order("default");break;case"stack_percent":g.offset(g.d3_stackedOffset_stackPercent),g.order("default")}return g},g.interpolate=function(e){return arguments.length?(c=e,g):c},g},e.models.stackedAreaChart=function(){function M(y){return y.each(function(y){var A=d3.select(this),_=this,D=(a||parseInt(A.style("width"))||960)-u.left-u.right,P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom;M.update=function(){A.call(M)},M.container=this,S.disabled=y.map(function(e){return!!e.disabled});if(!x){var H;x={};for(H in S)S[H]instanceof Array?x[H]=S[H].slice(0):x[H]=S[H]}if(!y||!y.length||!y.filter(function(e){return e.values.length}).length){var B=A.selectAll(".nv-noData").data([T]);return B.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),B.attr("x",u.left+D/2).attr("y",u.top+P/2).text(function(e){return e}),M}A.selectAll(".nv-noData").remove(),b=t.xScale(),w=t.yScale();var j=A.selectAll("g.nv-wrap.nv-stackedAreaChart").data([y]),F=j.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),I=j.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-stackedWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-controlsWrap"),F.append("g").attr("class","nv-interactive"),I.select("rect").attr("width",D).attr("height",P);if(h){var q=c?D-C:D;i.width(q),I.select(".nv-legendWrap").datum(y).call(i),u.top!=i.height()&&(u.top=i.height(),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-legendWrap").attr("transform","translate("+(D-q)+","+ -u.top+")")}if(c){var R=[{key:L.stacked||"Stacked",metaKey:"Stacked",disabled:t.style()!="stack",style:"stack"},{key:L.stream||"Stream",metaKey:"Stream",disabled:t.style()!="stream",style:"stream"},{key:L.expanded||"Expanded",metaKey:"Expanded",disabled:t.style()!="expand",style:"expand"},{key:L.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:t.style()!="stack_percent",style:"stack_percent"}];C=k.length/3*260,R=R.filter(function(e){return k.indexOf(e.metaKey)!==-1}),s.width(C).color(["#444","#444","#444"]),I.select(".nv-controlsWrap").datum(R).call(s),u.top!=Math.max(s.height(),i.height())&&(u.top=Math.max(s.height(),i.height()),P=(f||parseInt(A.style("height"))||400)-u.top-u.bottom),I.select(".nv-controlsWrap").attr("transform","translate(0,"+ -u.top+")")}j.attr("transform","translate("+u.left+","+u.top+")"),v&&I.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),m&&(o.width(D).height(P).margin({left:u.left,top:u.top}).svgContainer(A).xScale(b),j.select(".nv-interactive").call(o)),t.width(D).height(P);var U=I.select(".nv-stackedWrap").datum(y);U.call(t),p&&(n.scale(b).ticks(D/100).tickSize(-P,0),I.select(".nv-x.nv-axis").attr("transform","translate(0,"+P+")"),I.select(".nv-x.nv-axis").call(n)),d&&(r.scale(w).ticks(t.offset()=="wiggle"?0:P/36).tickSize(-D,0).setTickFormat(t.style()=="expand"||t.style()=="stack_percent"?d3.format("%"):E),I.select(".nv-y.nv-axis").call(r)),t.dispatch.on("areaClick.toggle",function(e){y.filter(function(e){return!e.disabled}).length===1?y.forEach(function(e){e.disabled=!1}):y.forEach(function(t,n){t.disabled=n!=e.seriesIndex}),S.disabled=y.map(function(e){return!!e.disabled}),N.stateChange(S),M.update()}),i.dispatch.on("stateChange",function(e){S.disabled=e.disabled,N.stateChange(S),M.update()}),s.dispatch.on("legendClick",function(e,n){if(!e.disabled)return;R=R.map(function(e){return e.disabled=!0,e}),e.disabled=!1,t.style(e.style),S.style=t.style(),N.stateChange(S),M.update()}),o.dispatch.on("elementMousemove",function(i){t.clearHighlights();var s,a,f,c=[];y.filter(function(e,t){return e.seriesIndex=t,!e.disabled}).forEach(function(n,r){a=e.interactiveBisect(n.values,i.pointXValue,M.x()),t.highlightPoint(r,a,!0);var o=n.values[a];if(typeof o=="undefined")return;typeof s=="undefined"&&(s=o),typeof f=="undefined"&&(f=M.xScale()(M.x()(o,a)));var u=t.style()=="expand"?o.display.y:M.y()(o,a);c.push({key:n.key,value:u,color:l(n,n.seriesIndex),stackedValue:o.display})}),c.reverse();if(c.length>2){var h=M.yScale().invert(i.mouseY),p=Infinity,d=null;c.forEach(function(e,t){h=Math.abs(h);var n=Math.abs(e.stackedValue.y0),r=Math.abs(e.stackedValue.y);if(h>=n&&h<=r+n){d=t;return}}),d!=null&&(c[d].highlight=!0)}var v=n.tickFormat()(M.x()(s,a)),m=t.style()=="expand"?function(e,t){return d3.format(".1%")(e)}:function(e,t){return r.tickFormat()(e)};o.tooltip.position({left:f+u.left,top:i.mouseY+u.top}).chartContainer(_.parentNode).enabled(g).valueFormatter(m).data({value:v,series:c})(),o.renderGuideLine(f)}),o.dispatch.on("elementMouseout",function(e){N.tooltipHide(),t.clearHighlights()}),N.on("tooltipShow",function(e){g&&O(e,_.parentNode)}),N.on("changeState",function(e){typeof e.disabled!="undefined"&&y.length===e.disabled.length&&(y.forEach(function(t,n){t.disabled=e.disabled[n]}),S.disabled=e.disabled),typeof e.style!="undefined"&&t.style(e.style),M.update()})}),M}var t=e.models.stackedArea(),n=e.models.axis(),r=e.models.axis(),i=e.models.legend(),s=e.models.legend(),o=e.interactiveGuideline(),u={top:30,right:25,bottom:50,left:60},a=null,f=null,l=e.utils.defaultColor(),c=!0,h=!0,p=!0,d=!0,v=!1,m=!1,g=!0,y=function(e,t,n,r,i){return"<h3>"+e+"</h3>"+"<p>"+n+" on "+t+"</p>"},b,w,E=d3.format(",.2f"),S={style:t.style()},x=null,T="No Data Available.",N=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState"),C=250,k=["Stacked","Stream","Expanded"],L={},A=0;n.orient("bottom").tickPadding(7),r.orient(v?"right":"left"),s.updateState(!1);var O=function(i,s){var o=i.pos[0]+(s.offsetLeft||0),u=i.pos[1]+(s.offsetTop||0),a=n.tickFormat()(t.x()(i.point,i.pointIndex)),f=r.tickFormat()(t.y()(i.point,i.pointIndex)),l=y(i.series.key,a,f,i,M);e.tooltip.show([o,u],l,i.value<0?"n":"s",null,s)};return t.dispatch.on("tooltipShow",function(e){e.pos=[e.pos[0]+u.left,e.pos[1]+u.top],N.tooltipShow(e)}),t.dispatch.on("tooltipHide",function(e){N.tooltipHide(e)}),N.on("tooltipHide",function(){g&&e.tooltip.cleanup()}),M.dispatch=N,M.stacked=t,M.legend=i,M.controls=s,M.xAxis=n,M.yAxis=r,M.interactiveLayer=o,d3.rebind(M,t,"x","y","size","xScale","yScale","xDomain","yDomain","xRange","yRange","sizeDomain","interactive","useVoronoi","offset","order","style","clipEdge","forceX","forceY","forceSize","interpolate"),M.options=e.utils.optionsFunc.bind(M),M.margin=function(e){return arguments.length?(u.top=typeof e.top!="undefined"?e.top:u.top,u.right=typeof e.right!="undefined"?e.right:u.right,u.bottom=typeof e.bottom!="undefined"?e.bottom:u.bottom,u.left=typeof e.left!="undefined"?e.left:u.left,M):u},M.width=function(e){return arguments.length?(a=e,M):a},M.height=function(e){return arguments.length?(f=e,M):f},M.color=function(n){return arguments.length?(l=e.utils.getColor(n),i.color(l),t.color(l),M):l},M.showControls=function(e){return arguments.length?(c=e,M):c},M.showLegend=function(e){return arguments.length?(h=e,M):h},M.showXAxis=function(e){return arguments.length?(p=e,M):p},M.showYAxis=function(e){return arguments.length?(d=e,M):d},M.rightAlignYAxis=function(e){return arguments.length?(v=e,r.orient(e?"right":"left"),M):v},M.useInteractiveGuideline=function(e){return arguments.length?(m=e,e===!0&&(M.interactive(!1),M.useVoronoi(!1)),M):m},M.tooltip=function(e){return arguments.length?(y=e,M):y},M.tooltips=function(e){return arguments.length?(g=e,M):g},M.tooltipContent=function(e){return arguments.length?(y=e,M):y},M.state=function(e){return arguments.length?(S=e,M):S},M.defaultState=function(e){return arguments.length?(x=e,M):x},M.noData=function(e){return arguments.length?(T=e,M):T},M.transitionDuration=function(e){return arguments.length?(A=e,M):A},M.controlsData=function(e){return arguments.length?(k=e,M):k},M.controlLabels=function(e){return arguments.length?typeof e!="object"?L:(L=e,M):L},r.setTickFormat=r.tickFormat,r.tickFormat=function(e){return arguments.length?(E=e,r):E},M}}(),define("plugin/plugins/nvd3/nv.d3",function(){}),define("plugin/charts/nvd3/common/config",["plugin/plugins/nvd3/nv.d3"],function(){return{title:"",category:"",library:"NVD3",tag:"svg",keywords:"small",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},use_panels:{title:"Use multi-panels",info:"Would you like to separate your data into individual panels?",type:"radiobutton",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/nvd3/bar/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked",category:"Bar diagrams",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/bar_horizontal/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Horizontal",category:"Bar diagrams",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}},settings:{x_axis_type:{init:"hide"}}})}),define("plugin/charts/nvd3/bar_horizontal_stacked/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stacked horizontal",category:"Bar diagrams",keywords:"default small",settings:{x_axis_type:{init:"hide"}},columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/line_focus/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line with focus",category:"Others",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/pie/config",["plugin/plugins/nvd3/nv.d3"],function(){return $.extend(!0,{},{title:"Pie chart",category:"Area charts",library:"NVD3",tag:"svg",keywords:"default small",use_panels:!0,columns:{label:{title:"Labels",is_label:!0,is_auto:!0},y:{title:"Values",is_numeric:!0}},settings:{show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]},donut_ratio:{title:"Donut ratio",info:"Determine how large the donut hole will be.",type:"select",init:"0.5",data:[{label:"50%",value:"0.5"},{label:"25%",value:"0.25"},{label:"10%",value:"0.10"},{label:"0%",value:"0"}]},label_separator:{type:"separator",title:"Label settings"},label_type:{title:"Donut label",info:"What would you like to show for each slice?",type:"select",init:"percent",data:[{label:"-- Nothing --",value:"hide",hide:"label_outside"},{label:"Label column",value:"key",show:"label_outside"},{label:"Value column",value:"value",show:"label_outside"},{label:"Percentage",value:"percent",show:"label_outside"}]},label_outside:{title:"Show outside",info:"Would you like to show labels outside the donut?",type:"select",init:"false",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}})}),define("plugin/charts/nvd3/stackedarea_full/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Expanded",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea_stream/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Stream",category:"Area charts",zoomable:"axis",keywords:"default small",showmaxmin:!0,columns:{y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/histogram/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogram",keywords:"default large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{x_axis_label:{init:"Values"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/histogram_discrete/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Discrete Histogram",category:"Data processing (requires 'charts' tool from Toolshed)",execute:"histogramdiscrete",keywords:"default large",columns:{x:{title:"Observations",is_label:!0}},settings:{x_axis_label:{init:"Breaks"},y_axis_label:{init:"Density"},y_axis_type:{init:"f"},y_axis_tick:{init:".2"}}})}),define("plugin/charts/nvd3/line/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/scatter/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",zoomable:"axis",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/nvd3/stackedarea/config",["plugin/charts/nvd3/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",zoomable:"axis",category:"Area charts",keywords:"default small",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/common/config",[],function(){return{title:"",category:"",library:"JqPlot",tag:"div",keywords:"default medium",settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},x_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["x_axis_tick"]},{label:"Auto",value:"auto",hide:["x_axis_tick"]},{label:"Float",value:"f",show:["x_axis_tick"]},{label:"Exponent",value:"e",show:["x_axis_tick"]},{label:"Integer",value:"d",hide:["x_axis_tick"]},{label:"Percentage",value:"p",show:["x_axis_tick"]},{label:"Rounded",value:"r",show:["x_axis_tick"]},{label:"SI-prefix",value:"s",show:["x_axis_tick"]}]},x_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},separator_legend:{title:"Others",type:"separator"},show_legend:{title:"Show legend",info:"Would you like to add a legend?",type:"radiobutton",init:"true",data:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}}}}),define("plugin/charts/jqplot/bar/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Regular",category:"Bar diagrams",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/line/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Line chart",category:"Others",columns:{x:{title:"Values for x-axis",is_label:!0,is_auto:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/scatter/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Scatter plot",category:"Others",columns:{x:{title:"Values for x-axis",is_numeric:!0},y:{title:"Values for y-axis",is_numeric:!0}}})}),define("plugin/charts/jqplot/boxplot/config",["plugin/charts/jqplot/common/config"],function(e){return $.extend(!0,{},e,{title:"Box plot",category:"Data processing (requires 'charts' tool from Toolshed)",library:"jqPlot",tag:"div",execute:"boxplot",keywords:"default large",columns:{y:{title:"Observations",is_numeric:!0}},settings:{separator_label:{title:"X axis",type:"separator"},x_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"X-axis",placeholder:"Axis label"},separator_tick:{title:"Y axis",type:"separator"},y_axis_label:{title:"Axis label",info:"Provide a label for the axis.",type:"text",init:"Y-axis",placeholder:"Axis label"},y_axis_type:{title:"Axis value type",info:"Select the value type of the axis.",type:"select",init:"auto",data:[{label:"-- Do not show values --",value:"hide",hide:["y_axis_tick"]},{label:"Auto",value:"auto",hide:["y_axis_tick"]},{label:"Float",value:"f",show:["y_axis_tick"]},{label:"Exponent",value:"e",show:["y_axis_tick"]},{label:"Integer",value:"d",hide:["y_axis_tick"]},{label:"Percentage",value:"p",show:["y_axis_tick"]},{label:"Rounded",value:"r",show:["y_axis_tick"]},{label:"SI-prefix",value:"s",show:["y_axis_tick"]}]},y_axis_tick:{title:"Axis tick format",info:"Select the tick format for the axis.",type:"select",init:".1",data:[{label:"0.00001",value:".5"},{label:"0.0001",value:".4"},{label:"0.001",value:".3"},{label:"0.01",value:".2"},{label:"0.1",value:".1"},{label:"1",value:"1"}]},y_axis_grid:{title:"Axis grid",info:"Would you like to show grid lines for this axis?",type:"radiobutton",init:"1",data:[{label:"On",value:"1"},{label:"Off",value:"0"}]}}})}),define("plugin/charts/types",["plugin/charts/nvd3/bar/config","plugin/charts/nvd3/bar_stacked/config","plugin/charts/nvd3/bar_horizontal/config","plugin/charts/nvd3/bar_horizontal_stacked/config","plugin/charts/nvd3/line_focus/config","plugin/charts/nvd3/pie/config","plugin/charts/nvd3/stackedarea_full/config","plugin/charts/nvd3/stackedarea_stream/config","plugin/charts/nvd3/histogram/config","plugin/charts/nvd3/histogram_discrete/config","plugin/charts/nvd3/line/config","plugin/charts/nvd3/scatter/config","plugin/charts/nvd3/stackedarea/config","plugin/charts/jqplot/bar/config","plugin/charts/jqplot/line/config","plugin/charts/jqplot/scatter/config","plugin/charts/jqplot/boxplot/config"],function(e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m){return Backbone.Model.extend({defaults:{jqplot_bar:p,nvd3_bar:e,nvd3_bar_stacked:t,nvd3_bar_horizontal:n,nvd3_bar_horizontal_stacked:r,nvd3_line_focus:i,nvd3_stackedarea:h,nvd3_stackedarea_full:o,nvd3_stackedarea_stream:u,nvd3_pie:s,nvd3_line:l,nvd3_scatter:c,nvd3_histogram:a,nvd3_histogram_discrete:f,jqplot_line:d,jqplot_scatter:v}})}),define("plugin/app",["mvc/ui/ui-modal","mvc/ui/ui-portlet","plugin/library/ui","utils/utils","plugin/library/jobs","plugin/library/datasets","plugin/library/storage","plugin/views/viewer","plugin/views/editor","plugin/models/config","plugin/models/chart","plugin/charts/types"],function(e,t,n,r,i,s,o,u,a,f,l,c){return Backbone.View.extend({initialize:function(t){this.options=t,Galaxy&&Galaxy.modal?this.modal=Galaxy.modal:this.modal=new e.View,this.config=new f,this.types=new c,this.chart=new l,this.jobs=new i(this),this.datasets=new s(this),this.storage=new o(this),this.viewer_view=new u(this),this.editor_view=new a(this),this.$el.append(this.viewer_view.$el),this.$el.append(this.editor_view.$el);if(!this.storage.load())this.go("editor");else{this.go("viewer");var n=this;this.chart.deferred.execute(function(){n.chart.trigger("redraw")})}},go:function(e){$(".tooltip").hide();switch(e){case"editor":this.editor_view.show(),this.viewer_view.hide();break;case"viewer":this.editor_view.hide(),this.viewer_view.show()}},chartPath:function(e){var t=e.split(/_(.+)/);return t.length>=2?t[0]+"/"+t[1]:(console.debug("FAILED App:chartPath() - Invalid format: "+e),undefined)},execute:function(e){},onunload:function(){},log:function(e,t){console.log(e+" "+t)}})});
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/bar/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/jqplot/bar/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/bar/wrapper.js
@@ -13,12 +13,26 @@
// render
draw : function(process_id, chart, request_dictionary) {
var plot = new Plot(this.app, this.options);
- plot.draw(process_id, chart, request_dictionary, function(plot_config){
- $.extend(true, plot_config, {
- seriesDefaults: {
- renderer: $.jqplot.BarRenderer
- }
- });
+ plot.draw({
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(plot_config){
+ $.extend(true, plot_config, {
+ seriesDefaults: {
+ renderer : $.jqplot.BarRenderer
+ },
+ axes: {
+ xaxis: {
+ pad : 1.2
+ },
+
+ yaxis: {
+ pad : 1.2
+ }
+ }
+ });
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/boxplot/config.js
--- /dev/null
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/boxplot/config.js
@@ -0,0 +1,138 @@
+define(['plugin/charts/jqplot/common/config'], function(plot_config) {
+
+return $.extend(true, {}, plot_config, {
+ title : 'Box plot',
+ category : 'Data processing (requires \'charts\' tool from Toolshed)',
+ library : 'jqPlot',
+ tag : 'div',
+ execute : 'boxplot',
+ keywords : 'default large',
+ columns : {
+ y : {
+ title : 'Observations',
+ is_numeric : true
+ }
+ },
+ settings : {
+ separator_label : {
+ title : 'X axis',
+ type : 'separator'
+ },
+ x_axis_label : {
+ title : 'Axis label',
+ info : 'Provide a label for the axis.',
+ type : 'text',
+ init : 'X-axis',
+ placeholder : 'Axis label'
+ },
+ separator_tick : {
+ title : 'Y axis',
+ type : 'separator'
+ },
+ y_axis_label : {
+ title : 'Axis label',
+ info : 'Provide a label for the axis.',
+ type : 'text',
+ init : 'Y-axis',
+ placeholder : 'Axis label'
+ },
+ y_axis_type : {
+ title : 'Axis value type',
+ info : 'Select the value type of the axis.',
+ type : 'select',
+ init : 'auto',
+ data : [
+ {
+ label : '-- Do not show values --',
+ value : 'hide',
+ hide : ['y_axis_tick']
+ },
+ {
+ label : 'Auto',
+ value : 'auto',
+ hide : ['y_axis_tick']
+ },
+ {
+ label : 'Float',
+ value : 'f',
+ show : ['y_axis_tick']
+ },
+ {
+ label : 'Exponent',
+ value : 'e',
+ show : ['y_axis_tick']
+ },
+ {
+ label : 'Integer',
+ value : 'd',
+ hide : ['y_axis_tick']
+ },
+ {
+ label : 'Percentage',
+ value : 'p',
+ show : ['y_axis_tick']
+ },
+ {
+ label : 'Rounded',
+ value : 'r',
+ show : ['y_axis_tick']
+ },
+ {
+ label : 'SI-prefix',
+ value : 's',
+ show : ['y_axis_tick']
+ }
+ ]
+ },
+ y_axis_tick : {
+ title : 'Axis tick format',
+ info : 'Select the tick format for the axis.',
+ type : 'select',
+ init : '.1',
+ data : [
+ {
+ label : '0.00001',
+ value : '.5'
+ },
+ {
+ label : '0.0001',
+ value : '.4'
+ },
+ {
+ label : '0.001',
+ value : '.3'
+ },
+ {
+ label : '0.01',
+ value : '.2'
+ },
+ {
+ label : '0.1',
+ value : '.1'
+ },
+ {
+ label : '1',
+ value : '1'
+ }
+ ]
+ },
+ y_axis_grid : {
+ title : 'Axis grid',
+ info : 'Would you like to show grid lines for this axis?',
+ type : 'radiobutton',
+ init : '1',
+ data : [
+ {
+ label : 'On',
+ value : '1'
+ },
+ {
+ label : 'Off',
+ value : '0'
+ }
+ ]
+ }
+ }
+});
+
+});
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/boxplot/logo.png
Binary file config/plugins/visualizations/charts/static/charts/jqplot/boxplot/logo.png has changed
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/boxplot/wrapper.js
--- /dev/null
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/boxplot/wrapper.js
@@ -0,0 +1,98 @@
+// dependencies
+define(['plugin/charts/jqplot/common/wrapper'], function(Plot) {
+
+// widget
+return Backbone.View.extend(
+{
+ // initialize
+ initialize: function(app, options) {
+ this.app = app;
+ this.options = options;
+ },
+
+ // render
+ draw : function(process_id, chart, request_dictionary) {
+ // configure request
+ var index = 0;
+ for (var i in request_dictionary.groups) {
+ var group = request_dictionary.groups[i];
+ group.columns = null;
+ group.columns = {
+ x: {
+ index: index++,
+ is_numeric: true
+ }
+ }
+ }
+
+ var plot = new Plot(this.app, this.options);
+ plot.draw({
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(plot_config){
+ $.extend(true, plot_config, {
+ seriesDefaults: {
+ renderer: $.jqplot.OHLCRenderer,
+ rendererOptions : {
+ candleStick : true
+ }
+ }
+ });
+ },
+ makeSeries : function (groups) {
+ // plot data
+ var plot_data = [];
+
+ // check group length
+ if (groups.length == 0 && groups[0].values.length == 0) {
+ return;
+ }
+
+ // reset data/categories
+ var data = [];
+
+ /*/ loop through data groups
+ for (var key in request_dictionary.groups) {
+ // get group
+ var group = request_dictionary.groups[key];
+
+ // format chart data
+ var point = [];
+ point.push(group.key);
+ for (var key in [0, 1, 3, 4]) {
+ point.push(group.values[key].x);
+ }
+
+ // add to data
+ data.push (point);
+ }*/
+
+ /*/ loop through data groups
+ for (var key in groups) {
+ var group = groups[key];
+ var point = [];
+ for (var value_index in group.values) {
+ point.push(group.values[value_index].x);
+ }
+ plot_data.push (point);
+ }
+
+ // return
+ return [plot_data];
+
+ var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4],
+ [2, 143.46, 144.66, 139.79, 140.02],
+ [3, 140.67, 143.56, 132.88, 142.44],
+ [4, 136.01, 139.5, 134.53, 139.48],
+ [5, 443.82, 144.56, 136.04, 136.97],
+ [6, 136.47, 146.4, 136, 144.67],
+ [7, 124.76, 135.9, 124.55, 135.81],
+ [8, 223.73, 129.31, 121.57, 122.5]];
+ return [catOHLC];*/
+ }
+ });
+ }
+});
+
+});
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/common/plot-config.js
--- a/config/plugins/visualizations/charts/static/charts/jqplot/common/plot-config.js
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/common/plot-config.js
@@ -18,7 +18,7 @@
seriesDefaults: {
renderer : $.jqplot.LineRenderer,
- lineWidth : 1, // Width of the line in pixels.
+ //lineWidth : 1, // Width of the line in pixels.
shadow : false, // show shadow or not.
showLine : true, // whether to render the line segments or not.
@@ -36,7 +36,7 @@
//barPadding : 5,
//barMargin : 2,
//barWidth : Math.max(0.5 / chart.groups.length, 2),
- barWidth : 1,
+ barWidth : 10,
//fillToZero : true,
//stackedValue : true
},
@@ -66,8 +66,19 @@
// A value of "outside" would not shrink the grid and allow
// the legend to overflow the container.
legend: {
+ renderer : $.jqplot.EnhancedLegendRenderer,
show : chart.settings.get('show_legend') == 'true',
- placement : 'insideGrid'
+ placement : 'outsideGrid',
+ location : 'n',
+ rendererOptions: {
+ textColor : '#000000',
+ fontSize : '12pt',
+ border : 'none',
+ shadowAlpha : 1,
+ background : 'rgba(255, 255, 255, 0.9)',
+ fontFamily : 'Arial',
+ numberRows : 1
+ }
},
axesDefaults: {
@@ -77,7 +88,7 @@
},
tickRenderer : $.jqplot.CanvasAxisTickRenderer ,
tickOptions: {
- fontSize : '10pt',
+ fontSize : '12pt',
textColor : '#000000'
}
},
@@ -86,16 +97,18 @@
// Use a category axis on the x axis and use our custom ticks.
xaxis: {
label : chart.settings.get('x_axis_label'),
- tickRenderer : $.jqplot.AxisTickRenderer,
+ tickRenderer : $.jqplot.CanvasAxisTickRenderer,
tickOptions: {
angle : -30
},
- tickInterval : 1
+ tickInterval : 1,
+ pad : 0
},
// Pad the y axis just a little so bars can get close to, but
// not touch, the grid boundaries. 1.2 is the default padding.
yaxis: {
label : chart.settings.get('y_axis_label'),
+ pad : 0
//tickOptions : {formatString: '$%d'},
//padding : 1.2,
//autoscale:true
@@ -111,7 +124,8 @@
cursor: {
show : true,
zoom : true,
- showTooltip : true
+ showTooltip : true,
+ style : 'pointer'
}
};
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/common/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/jqplot/common/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/common/wrapper.js
@@ -20,22 +20,28 @@
},
// render
- draw : function(process_id, chart, request_dictionary, callback) {
+ draw : function(options) {
+ _.extend(this.options, options);
var self = this;
var plot = new Tools.panelHelper({
app : this.app,
- process_id : process_id,
+ process_id : this.options.process_id,
canvas : this.options.canvas,
- chart : chart,
- request_dictionary : request_dictionary,
+ chart : this.options.chart,
+ request_dictionary : this.options.request_dictionary,
render : function(groups, canvas) {
- return self.render(chart, groups, canvas, callback)
+ return self.render(groups, canvas)
}
});
},
// draw all data into a single canvas
- render: function(chart, groups, el_canvas, callback) {
+ render: function(groups, el_canvas) {
+ // set chart settings
+ var chart = this.options.chart;
+ var makeConfig = this.options.makeConfig;
+ var makeSeries = this.options.makeSeries;
+
// create configuration
var plot_config = configmaker(chart);
var plot_data = []
@@ -43,16 +49,11 @@
// identify categories
this._makeCategories(chart, groups, plot_config, true);
- // loop through data groups
- for (var key in groups) {
- // get group
- var group = groups[key];
-
- // reset data
- var data = Tools.makeSeries(group, ['x', 'y']);
-
- // append series
- plot_data.push(data);
+ // reset data
+ if (makeSeries) {
+ plot_data = makeSeries(groups);
+ } else {
+ plot_data = Tools.makeSeries(groups);
}
// draw plot
@@ -61,8 +62,8 @@
var canvas = el_canvas[0];
// make custom wrapper callback
- if (callback) {
- callback(plot_config);
+ if (makeConfig) {
+ makeConfig(plot_config);
}
// Draw graph with default options, overwriting with passed options
@@ -90,6 +91,12 @@
// create categories
_makeCategories: function(chart, groups, plot_config) {
+
+ // check length
+ if (groups.length == 0) {
+ return;
+ }
+
// result
var result = Tools.makeCategories(chart, groups);
@@ -103,6 +110,9 @@
// add x tick formatter
function axisTickFormatter (axis_char, plot_axis, axis_type, axis_tick) {
+ // get chart definition from first group
+ var chart_definition = groups[0];
+
/*if (axis_type != 'auto' && axis_type !== undefined) {
plot_axis.tickOptions.formatter = function(format, value) {
if (axis_type == 'hide') {
@@ -112,14 +122,11 @@
return format(v);
}
} else {*/
- if (chart.definition.columns[axis_char].is_label) {
+ if (chart_definition.columns[axis_char] && chart_definition.columns[axis_char].is_label) {
plot_axis.tickOptions.formatter = function(format, value) {
- if (value == parseInt(value)) {
- if (result.array[axis_char] !== undefined) {
- return result.array[axis_char][value];
- } else {
- return '';
- }
+ if (result.array[axis_char] !== undefined &&
+ result.array[axis_char][value] !== undefined) {
+ return result.array[axis_char][value];
} else {
return '';
}
@@ -127,8 +134,8 @@
}
//}
}
- axisTickFormatter ('x', plot_config.axes.xaxis, chart.settings.get('x_axis_type'), chart.settings.get('x_axis_tick'));
- axisTickFormatter ('y', plot_config.axes.yaxis, chart.settings.get('y_axis_type'), chart.settings.get('y_axis_tick'));
+ //axisTickFormatter ('x', plot_config.axes.xaxis, chart.settings.get('x_axis_type'), chart.settings.get('x_axis_tick'));
+ //axisTickFormatter ('y', plot_config.axes.yaxis, chart.settings.get('y_axis_type'), chart.settings.get('y_axis_tick'));
},
// handle error
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/line/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/jqplot/line/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/line/wrapper.js
@@ -13,7 +13,11 @@
// render
draw : function(process_id, chart, request_dictionary) {
var plot = new Plot(this.app, this.options);
- plot.draw(process_id, chart, request_dictionary);
+ plot.draw({
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary
+ });
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/jqplot/scatter/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/jqplot/scatter/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/jqplot/scatter/wrapper.js
@@ -13,16 +13,21 @@
// render
draw : function(process_id, chart, request_dictionary) {
var plot = new Plot(this.app, this.options);
- plot.draw(process_id, chart, request_dictionary, function(plot_config){
- $.extend(true, plot_config, {
- seriesDefaults: {
- renderer: $.jqplot.LineRenderer,
- showLine: false,
- markerOptions : {
- show : true
+ plot.draw({
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(plot_config){
+ $.extend(true, plot_config, {
+ seriesDefaults: {
+ renderer: $.jqplot.LineRenderer,
+ showLine: false,
+ markerOptions : {
+ show : true
+ }
}
- }
- });
+ });
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/bar/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/bar/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/bar/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,10 +10,14 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarChart', process_id, chart, request_dictionary);
+ nvd3.draw({
+ type : 'multiBarChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary
+ });
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,10 +10,14 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarHorizontalChart', process_id, chart, request_dictionary);
+ nvd3.draw({
+ type : 'multiBarHorizontalChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary
+ });
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal_stacked/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal_stacked/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/bar_horizontal_stacked/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,11 +10,16 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarHorizontalChart', process_id, chart, request_dictionary, function(nvd3_model) {
- nvd3_model.stacked(true);
+ nvd3.draw({
+ type : 'multiBarHorizontalChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.stacked(true);
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/bar_stacked/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/bar_stacked/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/bar_stacked/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,11 +10,16 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarChart', process_id, chart, request_dictionary, function(nvd3_model) {
- nvd3_model.stacked(true);
+ nvd3.draw({
+ type : 'multiBarChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.stacked(true);
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/common/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/common/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/common/wrapper.js
@@ -11,23 +11,27 @@
},
// render
- draw : function(type, process_id, chart, request_dictionary, callback) {
+ draw : function(options) {
+ _.extend(this.options, options);
var self = this;
var plot = Tools.panelHelper({
app : this.app,
- process_id : process_id,
+ process_id : this.options.process_id,
canvas : this.options.canvas,
- chart : chart,
- request_dictionary : request_dictionary,
+ chart : this.options.chart,
+ request_dictionary : this.options.request_dictionary,
render : function(groups, canvas) {
- return self.render(type, chart, groups, canvas, callback)
+ return self.render(groups, canvas)
}
});
},
// render
- render : function(type, chart, groups, canvas, callback)
- {
+ render : function(groups, canvas) {
+ var chart = this.options.chart;
+ var type = this.options.type;
+ var makeConfig = this.options.makeConfig;
+
// create nvd3 model
var d3chart = nv.models[type]()
@@ -57,8 +61,8 @@
}
// custom callback
- if (callback) {
- callback(d3chart);
+ if (makeConfig) {
+ makeConfig(d3chart);
}
// make categories
@@ -118,6 +122,11 @@
}
}
+ // clip edges
+ if (nvd3_model.clipEdge) {
+ nvd3_model.clipEdge(true);
+ }
+
// d3 zoom wrapper
var d3zoom = d3.behavior.zoom()
.x(x)
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/histogram/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/histogram/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/histogram/wrapper.js
@@ -32,8 +32,14 @@
// load nvd3
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarChart', process_id, chart, request_dictionary, function(nvd3_model) {
- nvd3_model.options({showControls: true});
+ nvd3.draw({
+ type : 'multiBarChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.options({showControls: true});
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/histogram_discrete/wrapper.js
@@ -39,8 +39,14 @@
// draw
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('multiBarChart', process_id, chart, tmp_dict, function(nvd3_model) {
- nvd3_model.options({showControls: false});
+ nvd3.draw({
+ type : 'multiBarChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : tmp_dict,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.options({showControls: true});
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/line/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/line/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/line/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -13,7 +12,12 @@
// render
draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('lineChart', process_id, chart, request_dictionary);
+ nvd3.draw({
+ type : 'lineChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary
+ });
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/line_focus/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/line_focus/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/line_focus/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,10 +10,14 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('lineWithFocusChart', process_id, chart, request_dictionary);
+ nvd3.draw({
+ type : 'lineWithFocusChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary
+ });
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/scatter/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/scatter/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/scatter/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,13 +10,18 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('scatterChart', process_id, chart, request_dictionary, function(nvd3_model) {
- nvd3_model.showDistX(true)
+ nvd3.draw({
+ type : 'scatterChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.showDistX(true)
.showDistY(true)
.color(d3.scale.category10().range());
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/stackedarea/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea/wrapper.js
@@ -14,11 +14,16 @@
draw : function(process_id, chart, request_dictionary)
{
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('stackedAreaChart', process_id, chart, request_dictionary, function(nvd3_model) {
- // make plot
- nvd3_model.x(function(d) { return d.x })
+ nvd3.draw({
+ type : 'stackedAreaChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.x(function(d) { return d.x })
.y(function(d) { return d.y })
.clipEdge(true);
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_full/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_full/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_full/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,15 +10,18 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('stackedAreaChart', process_id, chart, request_dictionary, function(nvd3_model) {
- // make plot
- nvd3_model.x(function(d) { return d.x })
- .y(function(d) { return d.y })
- .clipEdge(true)
- .style('expand');
+ nvd3.draw({
+ type : 'stackedAreaChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.x(function(d) { return d.x })
+ .y(function(d) { return d.y })
+ .style('expand');
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_stream/wrapper.js
--- a/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_stream/wrapper.js
+++ b/config/plugins/visualizations/charts/static/charts/nvd3/stackedarea_stream/wrapper.js
@@ -2,8 +2,7 @@
define(['plugin/charts/nvd3/common/wrapper'], function(NVD3) {
// widget
-return Backbone.View.extend(
-{
+return Backbone.View.extend({
// initialize
initialize: function(app, options) {
this.app = app;
@@ -11,15 +10,19 @@
},
// render
- draw : function(process_id, chart, request_dictionary)
- {
+ draw : function(process_id, chart, request_dictionary) {
var nvd3 = new NVD3(this.app, this.options);
- nvd3.draw('stackedAreaChart', process_id, chart, request_dictionary, function(nvd3_model) {
- // make plot
- nvd3_model.x(function(d) { return d.x })
+ nvd3.draw({
+ type : 'stackedAreaChart',
+ process_id : process_id,
+ chart : chart,
+ request_dictionary : request_dictionary,
+ makeConfig : function(nvd3_model) {
+ nvd3_model.x(function(d) { return d.x })
.y(function(d) { return d.y })
.clipEdge(true)
.style('stream');
+ }
});
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/tools.js
--- a/config/plugins/visualizations/charts/static/charts/tools.js
+++ b/config/plugins/visualizations/charts/static/charts/tools.js
@@ -82,31 +82,44 @@
};
// series maker
-function makeSeries(group, order) {
- // reset data
- var data = [];
+function makeSeries(groups, order) {
+ // plot data
+ var plot_data = [];
- // format chart data
- for (var value_index in group.values) {
- // parse data
- var point = [];
- if (order) {
- for (var order_index in order) {
- var column_index = order[order_index];
- point.push(group.values[value_index][column_index]);
+ // loop through data groups
+ for (var key in groups) {
+ // get group
+ var group = groups[key];
+
+ // reset data
+ var data = [];
+
+ // format chart data
+ for (var value_index in group.values) {
+ // parse data
+ var point = [];
+ if (order) {
+ for (var order_index in order) {
+ var column_index = order[order_index];
+ point.push(group.values[value_index][column_index]);
+ }
+ } else {
+ for (var column_index in group.values[value_index]) {
+ point.push(group.values[value_index][column_index]);
+ }
}
- } else {
- for (var column_index in group.values[value_index]) {
- point.push(group.values[value_index][column_index]);
- }
+
+ // add to data
+ data.push (point);
}
+
+ // append series
+ plot_data.push(data);
+ }
- // add to data
- data.push (point);
- }
-
+
// return
- return data;
+ return plot_data;
};
// category maker
@@ -174,10 +187,10 @@
// return
return {
- panelHelper : panelHelper,
- makeCategories : makeCategories,
- makeSeries : makeSeries,
- getDomains : getDomains
+ panelHelper : panelHelper,
+ makeCategories : makeCategories,
+ makeSeries : makeSeries,
+ getDomains : getDomains
}
});
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/charts/types.js
--- a/config/plugins/visualizations/charts/static/charts/types.js
+++ b/config/plugins/visualizations/charts/static/charts/types.js
@@ -14,7 +14,8 @@
'plugin/charts/nvd3/stackedarea/config',
'plugin/charts/jqplot/bar/config',
'plugin/charts/jqplot/line/config',
- 'plugin/charts/jqplot/scatter/config'
+ 'plugin/charts/jqplot/scatter/config',
+ 'plugin/charts/jqplot/boxplot/config'
], function(nvd3_bar,
nvd3_bar_stacked,
nvd3_bar_horizontal,
@@ -30,7 +31,8 @@
nvd3_stackedarea,
jqplot_bar,
jqplot_line,
- jqplot_scatter
+ jqplot_scatter,
+ jqplot_boxplot
) {
// widget
@@ -53,7 +55,8 @@
'nvd3_histogram' : nvd3_histogram,
'nvd3_histogram_discrete' : nvd3_histogram_discrete,
'jqplot_line' : jqplot_line,
- 'jqplot_scatter' : jqplot_scatter
+ 'jqplot_scatter' : jqplot_scatter,
+ //'jqplot_boxplot' : jqplot_boxplot
}
});
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/library/screenshot.js
--- a/config/plugins/visualizations/charts/static/library/screenshot.js
+++ b/config/plugins/visualizations/charts/static/library/screenshot.js
@@ -7,6 +7,20 @@
// screenshot
function create ($el, screenshot_url, name) {
+ if ($el.find('svg').length > 0) {
+ _fromSVG ($el, screenshot_url, name);
+ } else {
+ _fromCanvas ($el);
+ }
+ };
+
+ // from jqplot
+ function _fromCanvas ($el) {
+ $el.find('#canvas').jqplotSaveImage({});
+ };
+
+ // from svg
+ function _fromSVG ($el, screenshot_url, name) {
var serializer = new XMLSerializer();
var xmlString = '';
var self = this;
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/plugins/jqplot/jquery.jqplot.plugins.js
--- a/config/plugins/visualizations/charts/static/plugins/jqplot/jquery.jqplot.plugins.js
+++ b/config/plugins/visualizations/charts/static/plugins/jqplot/jquery.jqplot.plugins.js
@@ -2,7 +2,135 @@
jsDate | (c) 2010-2013 Chris Leonello
*/(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.transposedData=true;this.renderer.animation={show:false,direction:"down",speed:3000,_supported:true};this._type="bar";if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);d.extend(true,this.renderer,o);this.fill=true;if(this.barDirection==="horizontal"&&this.rendererOptions.animation&&this.rendererOptions.animation.direction==null){this.renderer.animation.direction="left"}if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection==="vertical"||this.transposedData===false)?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);this._plotData.splice(q+r,0,[null,null]);this._stackData.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1;this._plotData[q][0]=q+1;this._stackData[q][0]=q+1}else{this.data[q][1]=q+1;this._plotData[q][1]=q+1;this._stackData[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}function i(v,u,s,t,o){var q=v,w=v-1,n,p,r=(o==="x")?0:1;if(q>0){p=t.series[w]._plotData[u][r];if((s*p)<0){n=i(w,u,s,t,o)}else{n=t.series[w].gridData[u][r]}}else{n=(r===0)?t.series[q]._xaxis.series_u2p(0):t.series[q]._yaxis.series_u2p(0)}return n}d.jqplot.BarRenderer.prototype.draw=function(E,L,q,G){var I;var A=d.extend({},q);var w=(A.shadow!=undefined)?A.shadow:this.shadow;var O=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var J=this.yaxis;var y=this._xaxis.series_u2p;var K=this._yaxis.series_u2p;var D,C;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var N=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);var x=N[0];var v=N[1];var s=N[2];var H=[];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(v/2-0.5)+s)*(this.barWidth+this.barPadding)}if(O){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var M=u.get(this.index);if(!this.useNegativeColors){M=A.fillStyle}var t=A.fillStyle;var r;var P;var o;if(this.barDirection=="vertical"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][1]==null){continue}H=[];r=L[I][0]+this._barNudge;if(this._stack&&this._prevGridData.length){o=i(this.index,I,this._plotData[I][1],G,"y")}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){o=this.gridData[I-1][1]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{o=E.canvas.height}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][1]>=0){H.push([r-this.barWidth/2,o]);H.push([r-this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,o])}else{H.push([r-this.barWidth/2,L[I][1]]);H.push([r-this.barWidth/2,o]);H.push([r+this.barWidth/2,o]);H.push([r+this.barWidth/2,L[I][1]])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}else{if(this.barDirection=="horizontal"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][0]==null){continue}H=[];r=L[I][1]-this._barNudge;P;if(this._stack&&this._prevGridData.length){P=i(this.index,I,this._plotData[I][0],G,"x")}else{if(this.fillToZero){P=this._xaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){P=this.gridData[I-1][0]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=E.canvas.width}}}else{P=0}}}}}if((this.fillToZero&&this._plotData[I][0]<0)||(this.waterfall&&this._data[I][0]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][0]>=0){H.push([P,r+this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([L[I][0],r+this.barWidth/2])}else{H.push([L[I][0],r+this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([P,r+this.barWidth/2])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}}}if(this.highlightColors.length==0){this.highlightColors=d.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var N=this.highlightColors;this.highlightColors=[];for(var I=0;I<this._dataColors.length;I++){this.highlightColors.push(N)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,G,p,B){var D;var w=(p!=undefined)?p:{};var t=(w.shadow!=undefined)?w.shadow:this.shadow;var I=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var E=this.yaxis;var v=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var y,C,x,u,s,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var H=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=H[0];s=H[1];r=H[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(s/2-0.5)+r)*(this.barWidth+this.barPadding)}if(I){if(this.barDirection=="vertical"){for(var D=0;D<G.length;D++){if(this.data[D][1]==null){continue}C=[];var q=G[D][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=i(this.index,D,this._plotData[D][1],B,"y")}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}C.push([q-this.barWidth/2,n]);C.push([q-this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,C,w)}}else{if(this.barDirection=="horizontal"){for(var D=0;D<G.length;D++){if(this.data[D][0]==null){continue}C=[];var q=G[D][1]-this._barNudge;var J;if(this._stack&&this._prevGridData.length){J=i(this.index,D,this._plotData[D][0],B,"x")}else{if(this.fillToZero){J=this._xaxis.series_u2p(0)}else{J=0}}C.push([J,q+this.barWidth/2]);C.push([G[D][0],q+this.barWidth/2]);C.push([G[D][0],q-this.barWidth/2]);C.push([J,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,C,w)}}}}}};function h(q,p,n){for(var o=0;o<this.series.length;o++){if(this.series[o].renderer.constructor==d.jqplot.BarRenderer){if(this.series[o].highlightMouseOver){this.series[o].highlightMouseDown=false}}}}function j(){if(this.plugins.barRenderer&&this.plugins.barRenderer.highlightCanvas){this.plugins.barRenderer.highlightCanvas.resetCanvas();this.plugins.barRenderer.highlightCanvas=null}this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.barRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(n){k(n.data.plot)})}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r);n=null}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight");n=null}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].show&&s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
jsDate | (c) 2010-2013 Chris Leonello
- */(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this._type="block";this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ */(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this._type="block";this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery);(function($) {
+ /**
+ * Class: $.jqplot.BoxplotRenderer
+ * jqPlot Plugin to draw box plots <http://en.wikipedia.org/wiki/Box_plot>.
+ *
+ * To use this plugin, include the renderer js file in
+ * your source:
+ *
+ * ><script type="text/javascript" src="plugins/jqplot.boxplotRenderer.js"></script>
+ *
+ * Then you set the renderer in the series options on your plot:
+ *
+ * > series: [{renderer:$.jqplot.BoxplotRenderer}]
+ *
+ * Data should be specified like so:
+ *
+ * > dat = [[sample_id, min, q1, median, q3, max], ...]
+ *
+ */
+ $.jqplot.BoxplotRenderer = function(){
+ // subclass line renderer to make use of some of its methods.
+ $.jqplot.LineRenderer.call(this);
+ // prop: boxWidth
+ // Default will auto calculate based on plot width and number
+ // of boxes displayed.
+ this.boxWidth = 'auto';
+ this._boxMaxWidth = 100; // if 'auto', cap at this max
+ // prop: lineWidth
+ // The thickness of all lines drawn. Default is 1.5 pixels.
+ this.lineWidth = 1.5;
+ };
+
+ $.jqplot.BoxplotRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BoxplotRenderer.prototype.constructor = $.jqplot.BoxplotRenderer;
+
+ // called with scope of series.
+ $.jqplot.BoxplotRenderer.prototype.init = function(options, plot) {
+
+ plot.postDrawHooks.add($.jqplot.BoxplotRenderer.removePointerLabels);
+
+ this.lineWidth = options.lineWidth || this.renderer.lineWidth;
+ $.jqplot.LineRenderer.prototype.init.call(this, options);
+ // set the yaxis data bounds here to account for high and low values
+ var db = {"min" : this._yaxis.min, "max" : this._yaxis.max};
+ var d = this._plotData;
+ for (var j=0, dj=d[j]; j<d.length; dj=d[++j]) {
+ for (var k=1, dk=dj[k]; k<dj.length; dk=dj[++k]) {
+ if (dk < db.min || db.min == null)
+ db.min = dk;
+ if (dk > db.max || db.max == null)
+ db.max = dk;
+ }
+ }
+ if(this._yaxis.min==null) {
+ this._yaxis.min = db.min*this._yaxis.pad;
+ }
+ if(this._yaxis.max==null) {
+ this._yaxis.max = db.max*this._yaxis.pad;
+ }
+ };
+
+ // called within scope of series.
+ $.jqplot.BoxplotRenderer.prototype.draw = function(ctx, gd, options) {
+ var d = this.data;
+ var r = this.renderer;
+ // set the shape renderer options
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ if (!options)
+ options = {};
+ if (!('lineWidth' in options))
+ $.extend(true, options, {lineWidth: this.lineWidth});
+ var boxopts = $.extend(true, {}, options, {strokeRect: true});
+ var boxW = options.boxWidth || r.boxWidth;
+ if (boxW == 'auto')
+ boxW = Math.min(r._boxMaxWidth, 0.6 * ctx.canvas.width/d.length);
+ var endW = boxW / 2; // min and max ticks are half the box width
+ boxW -= this.lineWidth*2;
+
+ var sctx = this.canvas._ctx;
+
+ ctx.save();
+ if (this.show) {
+ for (var i=0, di=d[i]; i<d.length; di=d[++i]) {
+ var x = xp(di[0]),
+ min = yp(di[7]),
+ q1 = yp(di[6]),
+ med = yp(di[5]),
+ q3 = yp(di[4]),
+ max = yp(di[3]);
+
+ var endL = x - endW/2; // start (left) x coord of min/max ticks
+ var endR = x + endW/2; // end (right) x coord of min/max ticks
+ var medL = x - boxW/2; // start (left) x coord of median tick
+ var medR = x + boxW/2; // end (right) x coord of median tick
+
+ // median tick is full box width
+ r.shapeRenderer.draw(ctx, [[medL, med], [medR, med]], options);
+
+ // draw whiskers
+ r.shapeRenderer.draw(ctx, [[x, min], [x, q1]], options);
+ r.shapeRenderer.draw(ctx, [[x, q3], [x, max]], options);
+
+ // draw min and max ticks
+ r.shapeRenderer.draw(ctx, [[endL, min], [endR, min]], options);
+ r.shapeRenderer.draw(ctx, [[endL, max], [endR, max]], options);
+
+ // draw box
+ boxH = q1 - q3;
+ boxpoints = [medL, q3, boxW, boxH];
+ r.shapeRenderer.draw(ctx, boxpoints, boxopts);
+ }
+ }
+ ctx.restore();
+ };
+
+ $.jqplot.BoxplotRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, shadows drawn with lines.
+ };
+
+ $.jqplot.BoxplotRenderer.removePointerLabels = function() {
+ $(".jqplot-point-label").each(function() {
+ $(this).hide();
+ });
+ }
+
+
+
+})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
jsDate | (c) 2010-2013 Chris Leonello
*/(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c,f){if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css({position:"absolute"});this._elem.addClass("jqplot-"+this.axis+"-label");e=null;return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
jsDate | (c) 2010-2013 Chris Leonello
@@ -16,4 +144,8 @@
jsDate | (c) 2010-2013 Chris Leonello
*/(function(j){j.jqplot.Cursor=function(q){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.looseZoom=true;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,q)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(t,s,r){var q=r||{};this.plugins.cursor=new j.jqplot.Cursor(q.cursor);var u=this.plugins.cursor;if(u.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(u.showCursorLegend){r.legend=r.legend||{};r.legend.renderer=j.jqplot.CursorLegendRenderer;r.legend.formatString=this.plugins.cursor.cursorLegendFormatString;r.legend.show=true}if(u.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(u.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(u.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var x=this.axes;if(!u.zoomProxy){for(var w in x){x[w].reset();x[w]._ticks=[];if(u._zoom.axes[w]!==undefined){x[w]._autoFormatString=u._zoom.axes[w].tickFormatString}}this.redraw()}else{var v=this.plugins.cursor.zoomCanvas._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);v=null}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(u.showTooltipDataPosition){u.showTooltipUnitPosition=false;u.showTooltipGridPosition=false;if(q.cursor.tooltipFormatString==undefined){u.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var x=this.plugins.cursor;if(x.zoomCanvas){x.zoomCanvas.resetCanvas();x.zoomCanvas=null}if(x.cursorCanvas){x.cursorCanvas.resetCanvas();x.cursorCanvas=null}if(x._tooltipElem){x._tooltipElem.emptyForce();x._tooltipElem=null}if(x.zoom){x.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions,this));x.zoomCanvas.setContext()}var v=document.createElement("div");x._tooltipElem=j(v);v=null;x._tooltipElem.addClass("jqplot-cursor-tooltip");x._tooltipElem.css({position:"absolute",display:"none"});if(x.zoomCanvas){x.zoomCanvas._elem.before(x._tooltipElem)}else{this.eventCanvas._elem.before(x._tooltipElem)}if(x.showVerticalLine||x.showHorizontalLine){x.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions,this));x.cursorCanvas.setContext()}if(x.showTooltipUnitPosition){if(x.tooltipAxisGroups.length===0){var t=this.series;var u;var q=[];for(var r=0;r<t.length;r++){u=t[r];var w=u.xaxis+","+u.yaxis;if(j.inArray(w,q)==-1){q.push(w)}}for(var r=0;r<q.length;r++){x.tooltipAxisGroups.push(q[r].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(v,r){var q=v.plugins.cursor;var u=r.plugins.cursor;q.zoomTarget=true;q.zoom=true;q.style="auto";q.dblClickReset=false;u.zoom=true;u.zoomProxy=true;r.target.bind("jqplotZoom",t);r.target.bind("jqplotResetZoom",s);function t(x,w,z,y,A){q.doZoom(w,z,v,A)}function s(w,x,y){v.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(u,v){var t=u.axes;var s=v._zoom.axes;if(!u.plugins.cursor.zoomProxy&&v._zoom.isZoomed){for(var r in t){t[r].reset();t[r]._ticks=[];t[r]._autoFormatString=s[r].tickFormatString}u.redraw();v._zoom.isZoomed=false}else{var q=v.zoomCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);q=null}u.target.trigger("jqplotResetZoom",[u,v])};j.jqplot.Cursor.resetZoom=function(q){q.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(G,t,C,u){var I=u;var F=C.axes;var r=I._zoom.axes;var w=r.start;var s=r.end;var B,E,z,D,v,x,q,H,J;var A=C.plugins.cursor.zoomCanvas._ctx;if((I.constrainZoomTo=="none"&&Math.abs(G.x-I._zoom.start[0])>6&&Math.abs(G.y-I._zoom.start[1])>6)||(I.constrainZoomTo=="x"&&Math.abs(G.x-I._zoom.start[0])>6)||(I.constrainZoomTo=="y"&&Math.abs(G.y-I._zoom.start[1])>6)){if(!C.plugins.cursor.zoomProxy){for(var y in t){if(I._zoom.axes[y]==undefined){I._zoom.axes[y]={};I._zoom.axes[y].numberTicks=F[y].numberTicks;I._zoom.axes[y].tickInterval=F[y].tickInterval;I._zoom.axes[y].daTickInterval=F[y].daTickInterval;I._zoom.axes[y].min=F[y].min;I._zoom.axes[y].max=F[y].max;I._zoom.axes[y].tickFormatString=(F[y].tickOptions!=null)?F[y].tickOptions.formatString:""}if((I.constrainZoomTo=="none")||(I.constrainZoomTo=="x"&&y.charAt(0)=="x")||(I.constrainZoomTo=="y"&&y.charAt(0)=="y")){z=t[y];if(z!=null){if(z>w[y]){v=w[y];x=z}else{D=w[y]-z;v=z;x=w[y]}q=F[y];H=null;if(q.alignTicks){if(q.name==="x2axis"&&C.axes.xaxis.show){H=C.axes.xaxis.numberTicks}else{if(q.name.charAt(0)==="y"&&q.name!=="yaxis"&&q.name!=="yMidAxis"&&C.axes.yaxis.show){H=C.axes.yaxis.numberTicks}}}if(this.looseZoom&&(F[y].renderer.constructor===j.jqplot.LinearAxisRenderer||F[y].renderer.constructor===j.jqplot.LogAxisRenderer)){J=j.jqplot.LinearTickGenerator(v,x,q._scalefact,H);if(F[y].tickInset&&J[0]<F[y].min+F[y].tickInset*F[y].tickInterval){J[0]+=J[4];J[2]-=1}if(F[y].tickInset&&J[1]>F[y].max-F[y].tickInset*F[y].tickInterval){J[1]-=J[4];J[2]-=1}if(F[y].renderer.constructor===j.jqplot.LogAxisRenderer&&J[0]<F[y].min){J[0]+=J[4];J[2]-=1}F[y].min=J[0];F[y].max=J[1];F[y]._autoFormatString=J[3];F[y].numberTicks=J[2];F[y].tickInterval=J[4];F[y].daTickInterval=[J[4]/1000,"seconds"]}else{F[y].min=v;F[y].max=x;F[y].tickInterval=null;F[y].numberTicks=null;F[y].daTickInterval=null}F[y]._ticks=[]}}}A.clearRect(0,0,A.canvas.width,A.canvas.height);C.redraw();I._zoom.isZoomed=true;A=null}C.target.trigger("jqplotZoom",[G,t,C,u])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(G,r,C){var J=C.plugins.cursor;var w="";var N=false;if(J.showTooltipGridPosition){w=G.x+", "+G.y;N=true}if(J.showTooltipUnitPosition){var F;for(var E=0;E<J.tooltipAxisGroups.length;E++){F=J.tooltipAxisGroups[E];if(N){w+="<br />"}if(J.useAxesFormatters){for(var D=0;D<F.length;D++){if(D){w+=", "}var H=C.axes[F[D]]._ticks[0].formatter;var B=C.axes[F[D]]._ticks[0].formatString;w+=H(B,r[F[D]])}}else{w+=j.jqplot.sprintf(J.tooltipFormatString,r[F[0]],r[F[1]])}N=true}}if(J.showTooltipDataPosition){var u=C.series;var M=d(C,G.x,G.y);var N=false;for(var E=0;E<u.length;E++){if(u[E].show){var y=u[E].index;var t=u[E].label.toString();var I=j.inArray(y,M.indices);var z=undefined;var x=undefined;if(I!=-1){var L=M.data[I].data;if(J.useAxesFormatters){var A=u[E]._xaxis._ticks[0].formatter;var q=u[E]._yaxis._ticks[0].formatter;var K=u[E]._xaxis._ticks[0].formatString;var v=u[E]._yaxis._ticks[0].formatString;z=A(K,L[0]);x=q(v,L[1])}else{z=L[0];x=L[1]}if(N){w+="<br />"}w+=j.jqplot.sprintf(J.tooltipFormatString,t,z,x);N=true}}}}J._tooltipElem.html(w)}function g(C,A){var E=A.plugins.cursor;var z=E.cursorCanvas._ctx;z.clearRect(0,0,z.canvas.width,z.canvas.height);if(E.showVerticalLine){E.shapeRenderer.draw(z,[[C.x,0],[C.x,z.canvas.height]])}if(E.showHorizontalLine){E.shapeRenderer.draw(z,[[0,C.y],[z.canvas.width,C.y]])}var G=d(A,C.x,C.y);if(E.showCursorLegend){var r=j(A.targetId+" td.jqplot-cursor-legend-label");for(var B=0;B<r.length;B++){var v=j(r[B]).data("seriesIndex");var t=A.series[v];var s=t.label.toString();var D=j.inArray(v,G.indices);var x=undefined;var w=undefined;if(D!=-1){var H=G.data[D].data;if(E.useAxesFormatters){var y=t._xaxis._ticks[0].formatter;var q=t._yaxis._ticks[0].formatter;var F=t._xaxis._ticks[0].formatString;var u=t._yaxis._ticks[0].formatString;x=y(F,H[0]);w=q(u,H[1])}else{x=H[0];w=H[1]}}if(A.legend.escapeHtml){j(r[B]).text(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}else{j(r[B]).html(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}}}z=null}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,q,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];q=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){t=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-t[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:t,data:G.data[v]})}}}}}return B}function n(r,t){var v=t.plugins.cursor;var s=v._tooltipElem;switch(v.tooltipLocation){case"nw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"n":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"ne":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"e":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;case"se":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"s":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"sw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"w":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;default:var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break}s.css("left",q);s.css("top",u);s=null}function m(u){var s=u._gridPadding;var v=u.plugins.cursor;var t=v._tooltipElem;switch(v.tooltipLocation){case"nw":var r=s.left+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"n":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"ne":var r=s.right+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css({right:r,top:q});break;case"e":var r=s.right+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({right:r,top:q});break;case"se":var r=s.right+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break;case"s":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"sw":var r=s.left+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"w":var r=s.left+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({left:r,top:q});break;default:var r=s.right-v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break}t=null}function k(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.clickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function c(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.dblClickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function f(w,t,q,z,u){var v=u.plugins.cursor;v.onGrid=false;if(v.show){j(w.target).css("cursor",v.previousCursor);if(v.showTooltip&&!(v._zoom.zooming&&v.showTooltipOutsideZoom&&!v.constrainOutsideZoom)){v._tooltipElem.empty();v._tooltipElem.hide()}if(v.zoom){v._zoom.gridpos=t;v._zoom.datapos=q}if(v.showVerticalLine||v.showHorizontalLine){var B=v.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);B=null}if(v.showCursorLegend){var A=j(u.targetId+" td.jqplot-cursor-legend-label");for(var s=0;s<A.length;s++){var y=j(A[s]).data("seriesIndex");var r=u.series[y];var x=r.label.toString();if(u.legend.escapeHtml){j(A[s]).text(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}else{j(A[s]).html(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}}}}}function b(r,q,u,t,s){var v=s.plugins.cursor;v.onGrid=true;if(v.show){v.previousCursor=r.target.style.cursor;r.target.style.cursor=v.style;if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}else{m(s)}v._tooltipElem.show()}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function i(r,q,u,t,s){var v=s.plugins.cursor;if(v.show){if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function o(y){var x=y.data.plot;var t=x.eventCanvas._elem.offset();var w={x:y.pageX-t.left,y:y.pageY-t.top};var u={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var v=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var q=x.axes;var r,s;for(r=11;r>0;r--){s=v[r-1];if(q[s].show){u[s]=q[s].series_p2u(w[s.charAt(0)])}}return{offsets:t,gridPos:w,dataPos:u}}function h(z){var x=z.data.plot;var y=x.plugins.cursor;if(y.show&&y.zoom&&y._zoom.started&&!y.zoomTarget){z.preventDefault();var B=y.zoomCanvas._ctx;var v=o(z);var w=v.gridPos;var t=v.dataPos;y._zoom.gridpos=w;y._zoom.datapos=t;y._zoom.zooming=true;var u=w.x;var s=w.y;var A=B.canvas.height;var q=B.canvas.width;if(y.showTooltip&&!y.onGrid&&y.showTooltipOutsideZoom){e(w,t,x);if(y.followMouse){n(w,x)}}if(y.constrainZoomTo=="x"){y._zoom.end=[u,A]}else{if(y.constrainZoomTo=="y"){y._zoom.end=[q,s]}else{y._zoom.end=[u,s]}}var r=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(r&&!r().isCollapsed){r().collapse()}}l.call(y);B=null}}function a(w,s,r,x,t){var v=t.plugins.cursor;if(t.plugins.mobile){j(document).one("vmouseup.jqplot_cursor",{plot:t},p)}else{j(document).one("mouseup.jqplot_cursor",{plot:t},p)}var u=t.axes;if(document.onselectstart!=undefined){v._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){v._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){v._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(v.zoom){if(!v.zoomProxy){var y=v.zoomCanvas._ctx;y.clearRect(0,0,y.canvas.width,y.canvas.height);y=null}if(v.constrainZoomTo=="x"){v._zoom.start=[s.x,0]}else{if(v.constrainZoomTo=="y"){v._zoom.start=[0,s.y]}else{v._zoom.start=[s.x,s.y]}}v._zoom.started=true;for(var q in r){v._zoom.axes.start[q]=r[q]}if(t.plugins.mobile){j(document).bind("vmousemove.jqplotCursor",{plot:t},h)}else{j(document).bind("mousemove.jqplotCursor",{plot:t},h)}}}function p(y){var v=y.data.plot;var x=v.plugins.cursor;if(x.zoom&&x._zoom.zooming&&!x.zoomTarget){var u=x._zoom.gridpos.x;var r=x._zoom.gridpos.y;var t=x._zoom.datapos;var z=x.zoomCanvas._ctx.canvas.height;var q=x.zoomCanvas._ctx.canvas.width;var w=v.axes;if(x.constrainOutsideZoom&&!x.onGrid){if(u<0){u=0}else{if(u>q){u=q}}if(r<0){r=0}else{if(r>z){r=z}}for(var s in t){if(t[s]){if(s.charAt(0)=="x"){t[s]=w[s].series_p2u(u)}else{t[s]=w[s].series_p2u(r)}}}}if(x.constrainZoomTo=="x"){r=z}else{if(x.constrainZoomTo=="y"){u=q}}x._zoom.end=[u,r];x._zoom.gridpos={x:u,y:r};x.doZoom(x._zoom.gridpos,t,v,x)}x._zoom.started=false;x._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&x._oldHandlers.onselectstart!=null){document.onselectstart=x._oldHandlers.onselectstart;x._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&x._oldHandlers.ondrag!=null){document.ondrag=x._oldHandlers.ondrag;x._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&x._oldHandlers.onmousedown!=null){document.onmousedown=x._oldHandlers.onmousedown;x._oldHandlers.onmousedown=null}}function l(){var y=this._zoom.start;var u=this._zoom.end;var s=this.zoomCanvas._ctx;var r,v,x,q;if(u[0]>y[0]){r=y[0];q=u[0]-y[0]}else{r=u[0];q=y[0]-u[0]}if(u[1]>y[1]){v=y[1];x=u[1]-y[1]}else{v=u[1];x=y[1]-u[1]}s.fillStyle="rgba(0,0,0,0.2)";s.strokeStyle="#999999";s.lineWidth=1;s.clearRect(0,0,s.canvas.width,s.canvas.height);s.fillRect(0,0,s.canvas.width,s.canvas.height);s.clearRect(r,v,q,x);s.strokeRect(r,v,q,x);s=null}j.jqplot.CursorLegendRenderer=function(q){j.jqplot.TableLegendRenderer.call(this,q);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var w=this._series,A;var r=document.createElement("table");this._elem=j(r);r=null;this._elem.addClass("jqplot-legend jqplot-cursor-legend");this._elem.css("position","absolute");var q=false;for(var x=0;x<w.length;x++){A=w[x];if(A.show&&A.showLabel){var v=j.jqplot.sprintf(this.formatString,A.label.toString());if(v){var t=A.color;if(A._stack&&!A.fill){t=""}z.call(this,v,t,q,x);q=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,A);if(y){z.call(this,y.label,y.color,q);q=true}}}}w=A=null;delete w;delete A}function z(D,C,F,s){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",s);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",s);if(this.escapeHtml){G.text(D)}else{G.html(D)}E=null;G=null}return this._elem}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
jsDate | (c) 2010-2013 Chris Leonello
- */(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery);
\ No newline at end of file
+ */(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,y){var f=this;if(this.show){var r=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(r.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(r.length/this.numberColumns)}else{d=r.length;o=1}}var B,z,e,l,k,n,p,t,h,g;var v=0;for(B=r.length-1;B>=0;B--){if(o==1&&r[B]._stack||r[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(z=0;z<o;z++){if(v<r.length&&(r[v].show||r[v].showLabel)){u=r[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");g=c(document.createElement("div"));g.addClass("jqplot-table-legend-swatch");g.css({backgroundColor:x,borderColor:x});l.append(h.append(g));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=g=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,k=i.replot,h=i.plot,f=i.speed,l=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(k){var n={};if(c.isPlainObject(k)){c.extend(true,n,k)}h.replot(n);if(g&&f){var d=h.series[l];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[l];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery);/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this.lineWidth=1.5;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){e=e||{};this.lineWidth=e.lineWidth||1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);this._type="ohlc";var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(A,N,j){var J=this.data;var v=this._xaxis.min;var z=this._xaxis.max;var l=0;var K=J.length;var p=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var D,E,f,M,F,n,O,C;var y;var u=this.renderer;var s=(j!=undefined)?j:{};var k=(s.shadow!=undefined)?s.shadow:this.shadow;var B=(s.fill!=undefined)?s.fill:this.fill;var c=(s.fillAndStroke!=undefined)?s.fillAndStroke:this.fillAndStroke;u.bodyWidth=(s.bodyWidth!=undefined)?s.bodyWidth:u.bodyWidth;u.tickLength=(s.tickLength!=undefined)?s.tickLength:u.tickLength;A.save();if(this.show){var m,q,g,Q,t;for(var D=0;D<J.length;D++){if(J[D][0]<v){l=D}else{if(J[D][0]<z){K=D+1}}}var I=this.gridData[K-1][0]-this.gridData[l][0];var L=K-l;try{var P=Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval,10))-this._xaxis.series_u2p(0))}catch(H){var P=I/L}if(u.candleStick){if(typeof(u.bodyWidth)=="number"){u._bodyWidth=u.bodyWidth}else{u._bodyWidth=Math.min(20,P/1.65)}}else{if(typeof(u.tickLength)=="number"){u._tickLength=u.tickLength}else{u._tickLength=Math.min(10,P/3.5)}}for(var D=l;D<K;D++){m=p(J[D][0]);if(u.hlc){q=null;g=G(J[D][1]);Q=G(J[D][2]);t=G(J[D][3])}else{q=G(J[D][1]);g=G(J[D][2]);Q=G(J[D][3]);t=G(J[D][4])}y={};if(u.candleStick&&!u.hlc){n=u._bodyWidth;O=m-n/2;if(t<q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.upBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,t]],f);u.shapeRenderer.draw(A,[[m,q],[m,Q]],f);y={};M=t;F=q-t;if(u.fillUpBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.upBodyColor){y.color=u.upBodyColor;y.fillStyle=u.upBodyColor}C=[O,M,n,F]}else{if(t>q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.downBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,q]],f);u.shapeRenderer.draw(A,[[m,t],[m,Q]],f);y={};M=q;F=t-q;if(u.fillDownBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.downBodyColor){y.color=u.downBodyColor;y.fillStyle=u.downBodyColor}C=[O,M,n,F]}else{if(u.wickColor){y.color=u.wickColor}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,Q]],f);y={};y.fillRect=false;y.strokeRect=false;O=[m-n/2,q];M=[m+n/2,t];n=null;F=null;C=[O,M]}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,C,f)}else{E=s.color;if(u.openColor){s.color=u.openColor}if(!u.hlc){u.shapeRenderer.draw(A,[[m-u._tickLength,q],[m,q]],s)}s.color=E;if(u.wickColor){s.color=u.wickColor}u.shapeRenderer.draw(A,[[m,g],[m,Q]],s);s.color=E;if(u.closeColor){s.color=u.closeColor}u.shapeRenderer.draw(A,[[m,t],[m+u._tickLength,t]],s);s.color=E}}}A.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'}}}})(jQuery);
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.boxplotRenderer.min.js
--- /dev/null
+++ b/config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.boxplotRenderer.min.js
@@ -0,0 +1,129 @@
+(function($) {
+ /**
+ * Class: $.jqplot.BoxplotRenderer
+ * jqPlot Plugin to draw box plots <http://en.wikipedia.org/wiki/Box_plot>.
+ *
+ * To use this plugin, include the renderer js file in
+ * your source:
+ *
+ * ><script type="text/javascript" src="plugins/jqplot.boxplotRenderer.js"></script>
+ *
+ * Then you set the renderer in the series options on your plot:
+ *
+ * > series: [{renderer:$.jqplot.BoxplotRenderer}]
+ *
+ * Data should be specified like so:
+ *
+ * > dat = [[sample_id, min, q1, median, q3, max], ...]
+ *
+ */
+ $.jqplot.BoxplotRenderer = function(){
+ // subclass line renderer to make use of some of its methods.
+ $.jqplot.LineRenderer.call(this);
+ // prop: boxWidth
+ // Default will auto calculate based on plot width and number
+ // of boxes displayed.
+ this.boxWidth = 'auto';
+ this._boxMaxWidth = 100; // if 'auto', cap at this max
+ // prop: lineWidth
+ // The thickness of all lines drawn. Default is 1.5 pixels.
+ this.lineWidth = 1.5;
+ };
+
+ $.jqplot.BoxplotRenderer.prototype = new $.jqplot.LineRenderer();
+ $.jqplot.BoxplotRenderer.prototype.constructor = $.jqplot.BoxplotRenderer;
+
+ // called with scope of series.
+ $.jqplot.BoxplotRenderer.prototype.init = function(options, plot) {
+
+ plot.postDrawHooks.add($.jqplot.BoxplotRenderer.removePointerLabels);
+
+ this.lineWidth = options.lineWidth || this.renderer.lineWidth;
+ $.jqplot.LineRenderer.prototype.init.call(this, options);
+ // set the yaxis data bounds here to account for high and low values
+ var db = {"min" : this._yaxis.min, "max" : this._yaxis.max};
+ var d = this._plotData;
+ for (var j=0, dj=d[j]; j<d.length; dj=d[++j]) {
+ for (var k=1, dk=dj[k]; k<dj.length; dk=dj[++k]) {
+ if (dk < db.min || db.min == null)
+ db.min = dk;
+ if (dk > db.max || db.max == null)
+ db.max = dk;
+ }
+ }
+ if(this._yaxis.min==null) {
+ this._yaxis.min = db.min*this._yaxis.pad;
+ }
+ if(this._yaxis.max==null) {
+ this._yaxis.max = db.max*this._yaxis.pad;
+ }
+ };
+
+ // called within scope of series.
+ $.jqplot.BoxplotRenderer.prototype.draw = function(ctx, gd, options) {
+ var d = this.data;
+ var r = this.renderer;
+ // set the shape renderer options
+ var xp = this._xaxis.series_u2p;
+ var yp = this._yaxis.series_u2p;
+ if (!options)
+ options = {};
+ if (!('lineWidth' in options))
+ $.extend(true, options, {lineWidth: this.lineWidth});
+ var boxopts = $.extend(true, {}, options, {strokeRect: true});
+ var boxW = options.boxWidth || r.boxWidth;
+ if (boxW == 'auto')
+ boxW = Math.min(r._boxMaxWidth, 0.6 * ctx.canvas.width/d.length);
+ var endW = boxW / 2; // min and max ticks are half the box width
+ boxW -= this.lineWidth*2;
+
+ var sctx = this.canvas._ctx;
+
+ ctx.save();
+ if (this.show) {
+ for (var i=0, di=d[i]; i<d.length; di=d[++i]) {
+ var x = xp(di[0]),
+ min = yp(di[7]),
+ q1 = yp(di[6]),
+ med = yp(di[5]),
+ q3 = yp(di[4]),
+ max = yp(di[3]);
+
+ var endL = x - endW/2; // start (left) x coord of min/max ticks
+ var endR = x + endW/2; // end (right) x coord of min/max ticks
+ var medL = x - boxW/2; // start (left) x coord of median tick
+ var medR = x + boxW/2; // end (right) x coord of median tick
+
+ // median tick is full box width
+ r.shapeRenderer.draw(ctx, [[medL, med], [medR, med]], options);
+
+ // draw whiskers
+ r.shapeRenderer.draw(ctx, [[x, min], [x, q1]], options);
+ r.shapeRenderer.draw(ctx, [[x, q3], [x, max]], options);
+
+ // draw min and max ticks
+ r.shapeRenderer.draw(ctx, [[endL, min], [endR, min]], options);
+ r.shapeRenderer.draw(ctx, [[endL, max], [endR, max]], options);
+
+ // draw box
+ boxH = q1 - q3;
+ boxpoints = [medL, q3, boxW, boxH];
+ r.shapeRenderer.draw(ctx, boxpoints, boxopts);
+ }
+ }
+ ctx.restore();
+ };
+
+ $.jqplot.BoxplotRenderer.prototype.drawShadow = function(ctx, gd, options) {
+ // This is a no-op, shadows drawn with lines.
+ };
+
+ $.jqplot.BoxplotRenderer.removePointerLabels = function() {
+ $(".jqplot-point-label").each(function() {
+ $(this).hide();
+ });
+ }
+
+
+
+})(jQuery);
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
--- /dev/null
+++ b/config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
@@ -0,0 +1,3 @@
+/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,y){var f=this;if(this.show){var r=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(r.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(r.length/this.numberColumns)}else{d=r.length;o=1}}var B,z,e,l,k,n,p,t,h,g;var v=0;for(B=r.length-1;B>=0;B--){if(o==1&&r[B]._stack||r[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(z=0;z<o;z++){if(v<r.length&&(r[v].show||r[v].showLabel)){u=r[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");g=c(document.createElement("div"));g.addClass("jqplot-table-legend-swatch");g.css({backgroundColor:x,borderColor:x});l.append(h.append(g));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=g=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,k=i.replot,h=i.plot,f=i.speed,l=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(k){var n={};if(c.isPlainObject(k)){c.extend(true,n,k)}h.replot(n);if(g&&f){var d=h.series[l];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[l];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery);
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.ohlcRenderer.min.js
--- /dev/null
+++ b/config/plugins/visualizations/charts/static/plugins/jqplot/plugins/jqplot.ohlcRenderer.min.js
@@ -0,0 +1,3 @@
+/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
+ jsDate | (c) 2010-2013 Chris Leonello
+ */(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this.lineWidth=1.5;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){e=e||{};this.lineWidth=e.lineWidth||1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);this._type="ohlc";var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(A,N,j){var J=this.data;var v=this._xaxis.min;var z=this._xaxis.max;var l=0;var K=J.length;var p=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var D,E,f,M,F,n,O,C;var y;var u=this.renderer;var s=(j!=undefined)?j:{};var k=(s.shadow!=undefined)?s.shadow:this.shadow;var B=(s.fill!=undefined)?s.fill:this.fill;var c=(s.fillAndStroke!=undefined)?s.fillAndStroke:this.fillAndStroke;u.bodyWidth=(s.bodyWidth!=undefined)?s.bodyWidth:u.bodyWidth;u.tickLength=(s.tickLength!=undefined)?s.tickLength:u.tickLength;A.save();if(this.show){var m,q,g,Q,t;for(var D=0;D<J.length;D++){if(J[D][0]<v){l=D}else{if(J[D][0]<z){K=D+1}}}var I=this.gridData[K-1][0]-this.gridData[l][0];var L=K-l;try{var P=Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval,10))-this._xaxis.series_u2p(0))}catch(H){var P=I/L}if(u.candleStick){if(typeof(u.bodyWidth)=="number"){u._bodyWidth=u.bodyWidth}else{u._bodyWidth=Math.min(20,P/1.65)}}else{if(typeof(u.tickLength)=="number"){u._tickLength=u.tickLength}else{u._tickLength=Math.min(10,P/3.5)}}for(var D=l;D<K;D++){m=p(J[D][0]);if(u.hlc){q=null;g=G(J[D][1]);Q=G(J[D][2]);t=G(J[D][3])}else{q=G(J[D][1]);g=G(J[D][2]);Q=G(J[D][3]);t=G(J[D][4])}y={};if(u.candleStick&&!u.hlc){n=u._bodyWidth;O=m-n/2;if(t<q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.upBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,t]],f);u.shapeRenderer.draw(A,[[m,q],[m,Q]],f);y={};M=t;F=q-t;if(u.fillUpBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.upBodyColor){y.color=u.upBodyColor;y.fillStyle=u.upBodyColor}C=[O,M,n,F]}else{if(t>q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.downBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,q]],f);u.shapeRenderer.draw(A,[[m,t],[m,Q]],f);y={};M=q;F=t-q;if(u.fillDownBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.downBodyColor){y.color=u.downBodyColor;y.fillStyle=u.downBodyColor}C=[O,M,n,F]}else{if(u.wickColor){y.color=u.wickColor}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,Q]],f);y={};y.fillRect=false;y.strokeRect=false;O=[m-n/2,q];M=[m+n/2,t];n=null;F=null;C=[O,M]}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,C,f)}else{E=s.color;if(u.openColor){s.color=u.openColor}if(!u.hlc){u.shapeRenderer.draw(A,[[m-u._tickLength,q],[m,q]],s)}s.color=E;if(u.wickColor){s.color=u.wickColor}u.shapeRenderer.draw(A,[[m,g],[m,Q]],s);s.color=E;if(u.closeColor){s.color=u.closeColor}u.shapeRenderer.draw(A,[[m,t],[m+u._tickLength,t]],s);s.color=E}}}A.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'}}}})(jQuery);
\ No newline at end of file
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/views/editor.js
--- a/config/plugins/visualizations/charts/static/views/editor.js
+++ b/config/plugins/visualizations/charts/static/views/editor.js
@@ -117,7 +117,6 @@
var $main = $('<div/>');
$main.append(Utils.wrap((new Ui.Label({ title : 'Provide a chart title:'})).$el));
$main.append(Utils.wrap(this.title.$el));
- $main.append(Utils.wrap((new Ui.Label({ title : 'Select a chart type:'})).$el));
$main.append(Utils.wrap(this.types.$el));
// add tab
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/views/types.js
--- a/config/plugins/visualizations/charts/static/views/types.js
+++ b/config/plugins/visualizations/charts/static/views/types.js
@@ -29,12 +29,14 @@
// create new element
var $el = $('<div class="charts-grid"/>');
+ // add label
+ $el.append(Utils.wrap((new Ui.Label({ title : 'How many data points would you like to analyze?'})).$el));
+
// construct chart type subset selection buttons
this.library = new Ui.RadioButton({
- data : [ { label: 'Default', value: 'default' },
- { label: 'Small (<1k lines)', value: 'small' },
- { label: 'Medium (<10k lines)', value: 'medium' },
- { label: 'Large (>10k lines)', value: 'large' }],
+ data : [ { label: 'Few (<1k)', value: 'small' },
+ { label: 'Some (<10k)', value: 'medium' },
+ { label: 'Many (>10k)', value: 'large' }],
onchange: function(value) {
self._filter(value);
}
@@ -48,7 +50,7 @@
this._render();
// set
- this.library.value('default');
+ this.library.value('small');
},
// value
@@ -83,15 +85,21 @@
// filter
_filter: function(value) {
+ // hide all category headers
+ this.$el.find('.header').hide();
+
+ // show chart types
var types = this.app.types.attributes;
for (var id in types) {
var type = types[id];
var $el = this.$el.find('#' + id);
+ var $header = this.$el.find('#types-header-' + this.categories_index[type.category]);
var keywords = type.keywords || '';
- if (keywords.indexOf(value) == -1 && value != 'all') {
+ if (keywords.indexOf(value) >= 0) {
+ $el.show();
+ $header.show();
+ } else {
$el.hide();
- } else {
- $el.show();
}
}
},
@@ -99,29 +107,38 @@
// render
_render: function() {
// load chart types into categories
- var categories = {};
+ this.categories = {};
+ this.categories_index = {};
+
+ // counter
+ var category_index = 0;
+
+ // identify categories
var types = this.app.types.attributes;
for (var id in types) {
- // add category
var type = types[id];
var category = type.category;
- if (!categories[category]) {
- categories[category] = {};
+ if (!this.categories[category]) {
+ this.categories[category] = {};
+ this.categories_index[category] = category_index++;
}
- categories[category][id] = type;
+ this.categories[category][id] = type;
}
// add categories and charts to screen
- for (var category in categories) {
+ for (var category in this.categories) {
// create empty element
var $el = $('<div style="clear: both;"/>')
// add header label
- $el.append(Utils.wrap(this._template_header({title: category})));
+ $el.append(Utils.wrap(this._template_header({
+ id : 'types-header-' + this.categories_index[category],
+ title : category
+ })));
// add chart types
- for (var id in categories[category]) {
- var type = categories[category][id];
+ for (var id in this.categories[category]) {
+ var type = this.categories[category][id];
$el.append(Utils.wrap(this._template_item({
id : id,
title : type.title + ' (' + type.library + ')',
@@ -155,7 +172,7 @@
// template
_template_header: function(options) {
- return '<div class="header">' +
+ return '<div id="' + options.id + '" class="header">' +
'• ' + options.title +
'<div>';
},
diff -r a0d1a91e05bee32dd5f2fac93d80fbe935ba8c28 -r 1682d8dbf493ab8d0e336260d936abe3c1c4942f config/plugins/visualizations/charts/static/views/viewer.js
--- a/config/plugins/visualizations/charts/static/views/viewer.js
+++ b/config/plugins/visualizations/charts/static/views/viewer.js
@@ -43,7 +43,7 @@
}),
picture_button: new Ui.ButtonIcon({
icon : 'fa-camera',
- tooltip : 'Download PDF-file (' + self.app.config.get('screenshot_url') + ')',
+ tooltip : 'SVGs are converted to PDF via ' + self.app.config.get('screenshot_url') + ' and CANVAS-based charts to PNG-files.',
title : 'Screenshot',
onclick : function() {
// attempt to load chart editor
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: Charts: Reintroduce chart filter, add jqplot plugin for large datasets
by commits-noreply@bitbucket.org 09 Jun '14
by commits-noreply@bitbucket.org 09 Jun '14
09 Jun '14
MSBuZXcgY29tbWl0IGluIGdhbGF4eS1jZW50cmFsOgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh
bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2EwZDFhOTFlMDViZS8KQ2hhbmdlc2V0OiAgIGEw
ZDFhOTFlMDViZQpVc2VyOiAgICAgICAgZ3VlcmxlcgpEYXRlOiAgICAgICAgMjAxNC0wNi0xMCAw
NTo1Mjo0NQpTdW1tYXJ5OiAgICAgQ2hhcnRzOiBSZWludHJvZHVjZSBjaGFydCBmaWx0ZXIsIGFk
ZCBqcXBsb3QgcGx1Z2luIGZvciBsYXJnZSA9CmRhdGFzZXRzCkFmZmVjdGVkICM6ICA0MCBmaWxl
cwoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEw
ZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9iYXIvY29uZmlnLmpz
Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRz
L3N0YXRpYy9jaGFydHMvanFwbG90L2Jhci9jb25maWcuPQpqcwpAQCAtMCwwICsxLDE5IEBACitk
ZWZpbmUoWydwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24vY29uZmlnJ10sIGZ1bmN0aW9uKHBs
b3RfY29uZmlnKSB7CisKK3JldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgcGxvdF9jb25maWcsIHsK
KyAgICB0aXRsZSAgICAgICA6ICdSZWd1bGFyJywKKyAgICBjYXRlZ29yeSAgICA6ICdCYXIgZGlh
Z3JhbXMnLAorICAgIGNvbHVtbnMgICAgIDogeworICAgICAgICB4IDogeworICAgICAgICAgICAg
dGl0bGUgICAgICAgOiAnVmFsdWVzIGZvciB4LWF4aXMnLAorICAgICAgICAgICAgaXNfbGFiZWwg
ICAgOiB0cnVlLAorICAgICAgICAgICAgaXNfYXV0byAgICAgOiB0cnVlCisgICAgICAgIH0sCisg
ICAgICAgIHkgOiB7CisgICAgICAgICAgICB0aXRsZSAgIDogJ1ZhbHVlcyBmb3IgeS1heGlzJywK
KyAgICAgICAgICAgIGlzX251bWVyaWMgIDogdHJ1ZQorICAgICAgICB9CisgICAgfQorfSk7CisK
K30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgw
OTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNk
ODBmYmU5MzViYThjMjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRp
Yy9jaGFydHMvanFwbG90PQovYmFyL2xvZ28ucG5nCkJpbmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdC9iYXIvbD0Kb2dvLnBu
ZyBoYXMgY2hhbmdlZAoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2Vk
OTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9i
YXIvd3JhcHBlci5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdC9iYXIvd3JhcHBlcj0KLmpzCkBAIC0w
LDAgKzEsMjYgQEAKKy8vIGRlcGVuZGVuY2llcworZGVmaW5lKFsncGx1Z2luL2NoYXJ0cy9qcXBs
b3QvY29tbW9uL3dyYXBwZXInXSwgZnVuY3Rpb24oUGxvdCkgeworCisvLyB3aWRnZXQKK3JldHVy
biBCYWNrYm9uZS5WaWV3LmV4dGVuZCgKK3sKKyAgICAvLyBpbml0aWFsaXplCisgICAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24oYXBwLCBvcHRpb25zKSB7CisgICAgICAgIHRoaXMuYXBwICAgICAgICA9
M0QgYXBwOworICAgICAgICB0aGlzLm9wdGlvbnMgICAgPTNEIG9wdGlvbnM7CisgICAgfSwKKyAg
ICAgICAgICAgPTIwCisgICAgLy8gcmVuZGVyCisgICAgZHJhdyA6IGZ1bmN0aW9uKHByb2Nlc3Nf
aWQsIGNoYXJ0LCByZXF1ZXN0X2RpY3Rpb25hcnkpIHsKKyAgICAgICAgdmFyIHBsb3QgPTNEIG5l
dyBQbG90KHRoaXMuYXBwLCB0aGlzLm9wdGlvbnMpOworICAgICAgICBwbG90LmRyYXcocHJvY2Vz
c19pZCwgY2hhcnQsIHJlcXVlc3RfZGljdGlvbmFyeSwgZnVuY3Rpb24ocGxvdF9jb249CmZpZyl7
CisgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCBwbG90X2NvbmZpZywgeworICAgICAgICAgICAg
ICAgIHNlcmllc0RlZmF1bHRzOiB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyOiAkLmpx
cGxvdC5CYXJSZW5kZXJlcgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9Cit9KTsKKworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoK
ZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFh
OTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9jb21tb24vY29uZmlnLmpz
Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRz
L3N0YXRpYy9jaGFydHMvanFwbG90L2NvbW1vbi9jb25mPQppZy5qcwpAQCAtMCwwICsxLDIxNyBA
QAorZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsKKworcmV0dXJuIHsKKyAgICB0aXRsZSAgICAgICA6
ICcnLAorICAgIGNhdGVnb3J5ICAgIDogJycsCisgICAgbGlicmFyeSAgICAgOiAnSnFQbG90JywK
KyAgICB0YWcgICAgICAgICA6ICdkaXYnLAorICAgIGtleXdvcmRzICAgIDogJ2RlZmF1bHQgbWVk
aXVtJywKKyAgICBzZXR0aW5ncyAgICA6IHsKKyAgICAgICAgc2VwYXJhdG9yX2xhYmVsICA6IHsK
KyAgICAgICAgICAgIHRpdGxlICAgICAgIDogJ1ggYXhpcycsCisgICAgICAgICAgICB0eXBlICAg
ICAgICA6ICdzZXBhcmF0b3InCisgICAgICAgIH0sCisgICAgICAgIHhfYXhpc19sYWJlbCA6IHsK
KyAgICAgICAgICAgIHRpdGxlICAgICAgIDogJ0F4aXMgbGFiZWwnLAorICAgICAgICAgICAgaW5m
byAgICAgICAgOiAnUHJvdmlkZSBhIGxhYmVsIGZvciB0aGUgYXhpcy4nLAorICAgICAgICAgICAg
dHlwZSAgICAgICAgOiAndGV4dCcsCisgICAgICAgICAgICBpbml0ICAgICAgICA6ICdYLWF4aXMn
LAorICAgICAgICAgICAgcGxhY2Vob2xkZXIgOiAnQXhpcyBsYWJlbCcKKyAgICAgICAgfSwKKyAg
ICAgICAgeF9heGlzX3R5cGUgOiB7CisgICAgICAgICAgICB0aXRsZSAgICAgICA6ICdBeGlzIHZh
bHVlIHR5cGUnLAorICAgICAgICAgICAgaW5mbyAgICAgICAgOiAnU2VsZWN0IHRoZSB2YWx1ZSB0
eXBlIG9mIHRoZSBheGlzLicsCisgICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAor
ICAgICAgICAgICAgaW5pdCAgICAgICAgOiAnYXV0bycsCisgICAgICAgICAgICBkYXRhICAgICAg
ICA6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAn
LS0gRG8gbm90IHNob3cgdmFsdWVzIC0tJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6
ICdoaWRlJywKKyAgICAgICAgICAgICAgICAgICAgaGlkZSAgICA6IFsneF9heGlzX3RpY2snXQor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBsYWJlbCAgIDogJ0F1dG8nLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJ2F1dG8n
LAorICAgICAgICAgICAgICAgICAgICBoaWRlICAgIDogWyd4X2F4aXNfdGljayddCisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVs
ICAgOiAnRmxvYXQnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJ2YnLAorICAgICAg
ICAgICAgICAgICAgICBzaG93ICAgIDogWyd4X2F4aXNfdGljayddCisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnRXhw
b25lbnQnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJ2UnLAorICAgICAgICAgICAg
ICAgICAgICBzaG93ICAgIDogWyd4X2F4aXNfdGljayddCisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnSW50ZWdlcics
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnZCcsCisgICAgICAgICAgICAgICAgICAg
IGhpZGUgICAgOiBbJ3hfYXhpc190aWNrJ10KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICA6ICdQZXJjZW50YWdlJywKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgICA6ICdwJywKKyAgICAgICAgICAgICAgICAgICAgc2hv
dyAgICA6IFsneF9heGlzX3RpY2snXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogJ1JvdW5kZWQnLAorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSAgIDogJ3InLAorICAgICAgICAgICAgICAgICAgICBzaG93ICAgIDog
Wyd4X2F4aXNfdGljayddCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnU0ktcHJlZml4JywKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgICA6ICdzJywKKyAgICAgICAgICAgICAgICAgICAgc2hvdyAgICA6IFsneF9h
eGlzX3RpY2snXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeF9heGlzX3RpY2sgOiB7CisgICAgICAgICAgICB0aXRsZSAgICAgICA6ICdBeGlz
IHRpY2sgZm9ybWF0JywKKyAgICAgICAgICAgIGluZm8gICAgICAgIDogJ1NlbGVjdCB0aGUgdGlj
ayBmb3JtYXQgZm9yIHRoZSBheGlzLicsCisgICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxl
Y3QnLAorICAgICAgICAgICAgaW5pdCAgICAgICAgOiAnLjEnLAorICAgICAgICAgICAgZGF0YSAg
ICAgICAgOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsYWJlbCAg
IDogJzAuMDAwMDEnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJy41JworICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsYWJl
bCAgIDogJzAuMDAwMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnLjQnCisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxh
YmVsICAgOiAnMC4wMDEnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJy4zJworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBs
YWJlbCAgIDogJzAuMDEnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJy4yJworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBs
YWJlbCAgIDogJzAuMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnLjEnCisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxh
YmVsICAgOiAnMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnMScKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBdCisKKyAgICAgICAgfSwKKyAgICAgICAgc2VwYXJhdG9y
X3RpY2sgIDogeworICAgICAgICAgICAgdGl0bGUgICAgICAgOiAnWSBheGlzJywKKyAgICAgICAg
ICAgIHR5cGUgICAgICAgIDogJ3NlcGFyYXRvcicKKyAgICAgICAgfSwKKyAgICAgICAgeV9heGlz
X2xhYmVsIDogeworICAgICAgICAgICAgdGl0bGUgICAgICAgOiAnQXhpcyBsYWJlbCcsCisgICAg
ICAgICAgICBpbmZvICAgICAgICA6ICdQcm92aWRlIGEgbGFiZWwgZm9yIHRoZSBheGlzLicsCisg
ICAgICAgICAgICB0eXBlICAgICAgICA6ICd0ZXh0JywKKyAgICAgICAgICAgIGluaXQgICAgICAg
IDogJ1ktYXhpcycsCisgICAgICAgICAgICBwbGFjZWhvbGRlciA6ICdBeGlzIGxhYmVsJworICAg
ICAgICB9LAorICAgICAgICB5X2F4aXNfdHlwZSA6IHsKKyAgICAgICAgICAgIHRpdGxlICAgICAg
IDogJ0F4aXMgdmFsdWUgdHlwZScsCisgICAgICAgICAgICBpbmZvICAgICAgICA6ICdTZWxlY3Qg
dGhlIHZhbHVlIHR5cGUgb2YgdGhlIGF4aXMuJywKKyAgICAgICAgICAgIHR5cGUgICAgICAgIDog
J3NlbGVjdCcsCisgICAgICAgICAgICBpbml0ICAgICAgICA6ICdhdXRvJywKKyAgICAgICAgICAg
IGRhdGEgICAgICAgIDogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bGFiZWwgICA6ICctLSBEbyBub3Qgc2hvdyB2YWx1ZXMgLS0nLAorICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSAgIDogJ2hpZGUnLAorICAgICAgICAgICAgICAgICAgICBoaWRlICAgIDogWyd5X2F4
aXNfdGljayddCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGxhYmVsICAgOiAnQXV0bycsCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ICAgOiAnYXV0bycsCisgICAgICAgICAgICAgICAgICAgIGhpZGUgICAgOiBbJ3lfYXhpc190aWNr
J10KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGFiZWwgICA6ICdGbG9hdCcsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAn
ZicsCisgICAgICAgICAgICAgICAgICAgIHNob3cgICAgOiBbJ3lfYXhpc190aWNrJ10KKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGFi
ZWwgICA6ICdFeHBvbmVudCcsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnZScsCisg
ICAgICAgICAgICAgICAgICAgIHNob3cgICAgOiBbJ3lfYXhpc190aWNrJ10KKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICA6
ICdJbnRlZ2VyJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6ICdkJywKKyAgICAgICAg
ICAgICAgICAgICAgaGlkZSAgICA6IFsneV9heGlzX3RpY2snXQorICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogJ1BlcmNl
bnRhZ2UnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJ3AnLAorICAgICAgICAgICAg
ICAgICAgICBzaG93ICAgIDogWyd5X2F4aXNfdGljayddCisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiAnUm91bmRlZCcs
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAncicsCisgICAgICAgICAgICAgICAgICAg
IHNob3cgICAgOiBbJ3lfYXhpc190aWNrJ10KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICA6ICdTSS1wcmVmaXgnLAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSAgIDogJ3MnLAorICAgICAgICAgICAgICAgICAgICBzaG93
ICAgIDogWyd5X2F4aXNfdGljayddCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9LAorICAgICAgICB5X2F4aXNfdGljayA6IHsKKyAgICAgICAgICAgIHRpdGxlICAg
ICAgIDogJ0F4aXMgdGljayBmb3JtYXQnLAorICAgICAgICAgICAgaW5mbyAgICAgICAgOiAnU2Vs
ZWN0IHRoZSB0aWNrIGZvcm1hdCBmb3IgdGhlIGF4aXMuJywKKyAgICAgICAgICAgIHR5cGUgICAg
ICAgIDogJ3NlbGVjdCcsCisgICAgICAgICAgICBpbml0ICAgICAgICA6ICcuMScsCisgICAgICAg
ICAgICBkYXRhICAgICAgICA6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGxhYmVsICAgOiAnMC4wMDAwMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAn
LjUnCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGxhYmVsICAgOiAnMC4wMDAxJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6
ICcuNCcKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGFiZWwgICA6ICcwLjAwMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAg
OiAnLjMnCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGxhYmVsICAgOiAnMC4wMScsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAg
OiAnLjInCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGxhYmVsICAgOiAnMC4xJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6
ICcuMScKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGFiZWwgICA6ICcxJywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6ICcx
JworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKworICAgICAgICB9LAorICAgICAg
ICBzZXBhcmF0b3JfbGVnZW5kIDogeworICAgICAgICAgICAgdGl0bGUgICAgICAgOiAnT3RoZXJz
JywKKyAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3NlcGFyYXRvcicKKyAgICAgICAgfSwKKyAg
ICAgICAgc2hvd19sZWdlbmQgOiB7CisgICAgICAgICAgICB0aXRsZSAgICAgICA6ICdTaG93IGxl
Z2VuZCcsCisgICAgICAgICAgICBpbmZvICAgICAgICA6ICdXb3VsZCB5b3UgbGlrZSB0byBhZGQg
YSBsZWdlbmQ/JywKKyAgICAgICAgICAgIHR5cGUgICAgICAgIDogJ3JhZGlvYnV0dG9uJywKKyAg
ICAgICAgICAgIGluaXQgICAgICAgIDogJ3RydWUnLAorICAgICAgICAgICAgZGF0YSAgICAgICAg
OiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogJ1ll
cycsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAndHJ1ZScKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgICA6ICdO
bycsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiAnZmFsc2UnCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgfQorfTsKKworfSk7ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFj
ZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMy
OCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBs
b3Q9Ci9jb21tb24vcGxvdC1jb25maWcuanMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3QvY29tbW9uL3Bs
b3Q9Ci1jb25maWcuanMKQEAgLTAsMCArMSwxMjIgQEAKKy8vIGRlcGVuZGVuY2llcworZGVmaW5l
KFtdLCBmdW5jdGlvbigpIHsKKworLy8gaGlnaGNoYXJ0cyBjb25maWd1cmF0aW9uCityZXR1cm4g
ZnVuY3Rpb24oY2hhcnQpIHsKKworICAgIC8vIGdldCBjaGFydCBzZXR0aW5ncworICAgIHZhciBz
ZXR0aW5ncyA9M0QgY2hhcnQuc2V0dGluZ3M7CisgICAgdmFyIHBsb3RfY29uZmlnID0zRCB7Cisg
ICAgICAgIHNlcmllc0NvbG9yczogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29sb3Jz
ID0zRCBbXTsKKyAgICAgICAgICAgIHZhciBjb2xvclNjYWxlID0zRCBkMy5zY2FsZS5jYXRlZ29y
eTIwKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0zRCAwOyBpIDwgY2hhcnQuZ3JvdXBzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goY29sb3JTY2FsZShpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29sb3JzOworICAgICAgICB9KCks
CisgICAgICA9MjAKKyAgICAgICAgc2VyaWVzRGVmYXVsdHM6IHsKKyAgICAgICAgICAgIHJlbmRl
cmVyICAgICAgICAgICAgICAgIDogJC5qcXBsb3QuTGluZVJlbmRlcmVyLAorICAgICAgICAgICAg
bGluZVdpZHRoICAgICAgICAgICAgICAgOiAxLCAgICAgICAgICAgICAgICAgICAgLy8gV2lkdGgg
b2YgdGg9CmUgbGluZSBpbiBwaXhlbHMuCisgICAgICAgICAgICBzaGFkb3cgICAgICAgICAgICAg
ICAgICA6IGZhbHNlLCAgICAgICAgICAgICAgICAvLyBzaG93IHNoYWRvdz0KIG9yIG5vdC4KKyAg
ICAgICAgICAgIHNob3dMaW5lICAgICAgICAgICAgICAgIDogdHJ1ZSwgICAgICAgICAgICAgICAg
IC8vIHdoZXRoZXIgdG8gPQpyZW5kZXIgdGhlIGxpbmUgc2VnbWVudHMgb3Igbm90LgorICAgICAg
PTIwCisgICAgICAgICAgICAvLyBTaG93IHBvaW50IGxhYmVscyB0byB0aGUgcmlnaHQgKCdlJ2Fz
dCkgb2YgZWFjaCBiYXIuCisgICAgICAgICAgICAvLyBlZGdlVG9sZXJhbmNlIG9mIC0xNSBhbGxv
d3MgbGFiZWxzIGZsb3cgb3V0c2lkZSB0aGUgZ3JpZAorICAgICAgICAgICAgLy8gdXAgdG8gMTUg
cGl4ZWxzLiAgSWYgdGhleSBmbG93IG91dCBtb3JlIHRoYW4gdGhhdCwgdGhleT0yMAorICAgICAg
ICAgICAgLy8gd2lsbCBiZSBoaWRkZW4uCisgICAgICAgICAgICAvL3BvaW50TGFiZWxzICAgICAg
ICAgICAgIDogeyBzaG93OiB0cnVlLCBsb2NhdGlvbjogJ2UnLCBlZGdlVD0Kb2xlcmFuY2U6IC0x
NSB9LAorICAgICAgICAgICAgLy8gUm90YXRlIHRoZSBiYXIgc2hhZG93IGFzIGlmIGJhciBpcyBs
aXQgZnJvbSB0b3AgcmlnaHQuCisgICAgICAgICAgICAvL3NoYWRvd0FuZ2xlICAgICAgICAgICAg
IDogMTM1LAorICAgICAgICAgICAgLy8gSGVyZSdzIHdoZXJlIHdlIHRlbGwgdGhlIGNoYXJ0IGl0
IGlzIG9yaWVudGVkIGhvcml6b250YWxseS4KKyAgICAgICAgICAgIHJlbmRlcmVyT3B0aW9uczog
eworICAgICAgICAgICAgICAgIHNoYWRvd0RlcHRoICAgICAgICAgOiAwLAorICAgICAgICAgICAg
ICAgIC8vYmFyRGlyZWN0aW9uICAgICAgOiAnaG9yaXpvbnRhbCcsCisgICAgICAgICAgICAgICAg
Ly9iYXJQYWRkaW5nICAgICAgICA6IDUsCisgICAgICAgICAgICAgICAgLy9iYXJNYXJnaW4gICAg
ICAgICA6IDIsCisgICAgICAgICAgICAgICAgLy9iYXJXaWR0aCAgICAgICAgICAgIDogTWF0aC5t
YXgoMC41IC8gY2hhcnQuZ3JvdXBzLmxlbmd0aD0KLCAyKSwKKyAgICAgICAgICAgICAgICBiYXJX
aWR0aCAgICAgICAgICAgIDogMSwKKyAgICAgICAgICAgICAgICAvL2ZpbGxUb1plcm8gICAgICAg
IDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAvL3N0YWNrZWRWYWx1ZSAgICAgIDogdHJ1ZQorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIG1hcmtlclJlbmRlcmVyICAgICAgICAgIDogJC5qcXBs
b3QuTWFya2VyUmVuZGVyZXIsCisgICAgICAgICAgICBtYXJrZXJPcHRpb25zOiB7CisgICAgICAg
ICAgICAgICAgc2hvdyAgICAgICAgICAgICAgICA6IGZhbHNlLCAgICAgICAgICAgICAgICAvLyB3
ZXRoZXIgdG8gcz0KaG93IGRhdGEgcG9pbnQgbWFya2Vycy4KKyAgICAgICAgICAgICAgICBzdHls
ZSAgICAgICAgICAgICAgIDogJ2ZpbGxlZENpcmNsZScsICAgICAgIC8vIGNpcmNsZSwgZGlhPQpt
b25kLCBzcXVhcmUsIGZpbGxlZENpcmNsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGxlZERpYW1vPQpuZCBvciBmaWxs
ZWRTcXVhcmUuCisgICAgICAgICAgICAgICAgbGluZVdpZHRoICAgICAgICAgICA6IDAsICAgICAg
ICAgICAgICAgICAgICAvLyB3aWR0aCBvZiB0aD0KZSBzdHJva2UgZHJhd2luZyB0aGUgbWFya2Vy
LgorICAgICAgICAgICAgICAgIHNpemUgICAgICAgICAgICAgICAgOiAxMCwgICAgICAgICAgICAg
ICAgICAgLy8gc2l6ZSAoZGlhbWU9CnRlciwgZWRnZSBsZW5ndGgsIGV0Yy4pIG9mIHRoZSBtYXJr
ZXIuCisgICAgICAgICAgICAgICAgc2hhZG93ICAgICAgICAgICAgICA6IGZhbHNlLCAgICAgICAg
ICAgICAgICAvLyB3ZXRoZXIgdG8gZD0KcmF3IHNoYWRvdyBvbiBtYXJrZXIgb3Igbm90LgorICAg
ICAgICAgICAgICAgIHNoYWRvd0FuZ2xlICAgICAgICAgOiA0NSwgICAgICAgICAgICAgICAgICAg
Ly8gYW5nbGUgb2YgdGg9CmUgc2hhZG93LiAgQ2xvY2t3aXNlIGZyb20geCBheGlzLgorICAgICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAgICAgICAgOiAxLCAgICAgICAgICAgICAgICAgICAgLy8g
b2Zmc2V0IGZyb209CiB0aGUgbGluZSBvZiB0aGUgc2hhZG93LAorICAgICAgICAgICAgICAgIHNo
YWRvd0RlcHRoICAgICAgICAgOiAzLCAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHM9
CnRyb2tlcyB0byBtYWtlIHdoZW4gZHJhd2luZyBzaGFkb3cuICBFYWNoIHN0cm9rZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b2Zmc2V0IGJ5IHM9CmhhZG93T2Zmc2V0IGZyb20gdGhlIGxhc3QuCisgICAgICAgICAgICAgICAg
c2hhZG93QWxwaGEgICAgICAgICA6IDAuMDcgICAgICAgICAgICAgICAgICAvLyBPcGFjaXR5IG9m
ID0KdGhlIHNoYWRvdworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgPTIwCisgICAg
ICAgIC8vIEN1c3RvbSBsYWJlbHMgZm9yIHRoZSBzZXJpZXMgYXJlIHNwZWNpZmllZCB3aXRoIHRo
ZSAibGFiZWwiCisgICAgICAgIC8vIG9wdGlvbiBvbiB0aGUgc2VyaWVzIG9wdGlvbi4gIEhlcmUg
YSBzZXJpZXMgb3B0aW9uIG9iamVjdAorICAgICAgICAvLyBpcyBzcGVjaWZpZWQgZm9yIGVhY2gg
c2VyaWVzLgorICAgICAgICBzZXJpZXM6IFtdLAorICAgICAgPTIwCisgICAgICAgIC8vIFNob3cg
dGhlIGxlZ2VuZCBhbmQgcHV0IGl0IG91dHNpZGUgdGhlIGdyaWQsIGJ1dCBpbnNpZGUgdGhlCisg
ICAgICAgIC8vIHBsb3QgY29udGFpbmVyLCBzaHJpbmtpbmcgdGhlIGdyaWQgdG8gYWNjb21vZGF0
ZSB0aGUgbGVnZW5kLgorICAgICAgICAvLyBBIHZhbHVlIG9mICJvdXRzaWRlIiB3b3VsZCBub3Qg
c2hyaW5rIHRoZSBncmlkIGFuZCBhbGxvdworICAgICAgICAvLyB0aGUgbGVnZW5kIHRvIG92ZXJm
bG93IHRoZSBjb250YWluZXIuCisgICAgICAgIGxlZ2VuZDogeworICAgICAgICAgICAgc2hvdyAg
ICAgICAgICAgICAgICAgICAgOiBjaGFydC5zZXR0aW5ncy5nZXQoJ3Nob3dfbGVnZW5kJykgPQo9
M0Q9M0QgJ3RydWUnLAorICAgICAgICAgICAgcGxhY2VtZW50ICAgICAgICAgICAgICAgOiAnaW5z
aWRlR3JpZCcKKyAgICAgICAgfSwKKyAgICAgID0yMAorICAgICAgICBheGVzRGVmYXVsdHM6IHsK
KyAgICAgICAgICAgIGxhYmVsUmVuZGVyZXIgICAgICAgICAgIDogJC5qcXBsb3QuQ2FudmFzQXhp
c0xhYmVsUmVuZGVyZXIsCisgICAgICAgICAgICBsYWJlbE9wdGlvbnM6IHsKKyAgICAgICAgICAg
ICAgICBmb250U2l6ZSAgICAgICAgICAgIDogJzEycHQnCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgdGlja1JlbmRlcmVyICAgICAgICAgICAgOiAkLmpxcGxvdC5DYW52YXNBeGlzVGlja1Jl
bmRlcmVyICwKKyAgICAgICAgICAgIHRpY2tPcHRpb25zOiB7CisgICAgICAgICAgICAgICAgZm9u
dFNpemUgICAgICAgICAgICA6ICcxMHB0JywKKyAgICAgICAgICAgICAgICB0ZXh0Q29sb3IgICAg
ICAgICAgIDogJyMwMDAwMDAnCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICA9MjAKKyAg
ICAgICAgYXhlczogeworICAgICAgICAgICAgLy8gVXNlIGEgY2F0ZWdvcnkgYXhpcyBvbiB0aGUg
eCBheGlzIGFuZCB1c2Ugb3VyIGN1c3RvbSB0aWNrcy4KKyAgICAgICAgICAgIHhheGlzOiB7Cisg
ICAgICAgICAgICAgICAgbGFiZWwgICAgICAgICAgICAgICA6IGNoYXJ0LnNldHRpbmdzLmdldCgn
eF9heGlzX2xhYmVsJyksCisgICAgICAgICAgICAgICAgdGlja1JlbmRlcmVyICAgICAgICA6ICQu
anFwbG90LkF4aXNUaWNrUmVuZGVyZXIsCisgICAgICAgICAgICAgICAgdGlja09wdGlvbnM6IHsK
KyAgICAgICAgICAgICAgICAgICAgYW5nbGUgICAgICAgICAgIDogLTMwCisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWwgICAgICAgIDogMQorICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIC8vIFBhZCB0aGUgeSBheGlzIGp1c3QgYSBsaXR0bGUgc28gYmFy
cyBjYW4gZ2V0IGNsb3NlIHRvLCBidXQKKyAgICAgICAgICAgIC8vIG5vdCB0b3VjaCwgdGhlIGdy
aWQgYm91bmRhcmllcy4gIDEuMiBpcyB0aGUgZGVmYXVsdCBwYWRkaW5nLgorICAgICAgICAgICAg
eWF4aXM6IHsKKyAgICAgICAgICAgICAgICBsYWJlbCAgICAgICAgICAgICAgIDogY2hhcnQuc2V0
dGluZ3MuZ2V0KCd5X2F4aXNfbGFiZWwnKSwKKyAgICAgICAgICAgICAgICAvL3RpY2tPcHRpb25z
ICAgICAgIDoge2Zvcm1hdFN0cmluZzogJyQlZCd9LAorICAgICAgICAgICAgICAgIC8vcGFkZGlu
ZyAgICAgICAgICAgICA6IDEuMiwKKyAgICAgICAgICAgICAgICAvL2F1dG9zY2FsZTp0cnVlCisg
ICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICA9MjAKKyAgICAgICAgZ3JpZDogeworICAg
ICAgICAgICAgYmFja2dyb3VuZCAgICAgICAgICAgICAgOiAnI0ZGRkZGRicsIC8vIENTUyBjb2xv
ciBzcGVjIGZvciBiYWM9Cmtncm91bmQgY29sb3Igb2YgZ3JpZC4KKyAgICAgICAgICAgIGJvcmRl
cldpZHRoICAgICAgICAgICAgIDogMCwKKyAgICAgICAgICAgIHNoYWRvdyAgICAgICAgICAgICAg
ICAgIDogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgID0yMAorICAgICAgICBjdXJzb3I6IHsKKyAg
ICAgICAgICAgIHNob3cgICAgICAgICAgICAgICAgICAgIDogdHJ1ZSwKKyAgICAgICAgICAgIHpv
b20gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSwKKyAgICAgICAgICAgIHNob3dUb29sdGlwICAg
ICAgICAgICAgIDogdHJ1ZQorICAgICAgICB9CisgICAgfTsKKyAgID0yMAorICAgIC8vIGNhbGxi
YWNrCisgICAgcmV0dXJuIHBsb3RfY29uZmlnOworfTsKKworfSk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2
NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9jb21t
b24vd3JhcHBlci5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdC9jb21tb24vd3JhcD0KcGVyLmpzCkBA
IC0wLDAgKzEsMTQwIEBACisvLyBkZXBlbmRlbmNpZXMKK2RlZmluZShbJ3BsdWdpbi9jaGFydHMv
anFwbG90L2NvbW1vbi9wbG90LWNvbmZpZycsICdwbHVnaW4vY2hhcnRzL3Rvb2xzJ10sPQogZnVu
Y3Rpb24oY29uZmlnbWFrZXIsIFRvb2xzKSB7CisKKy8vIHdpZGdldAorcmV0dXJuIEJhY2tib25l
LlZpZXcuZXh0ZW5kKAoreworICAgIC8vIHBsb3Qgc2VyaWVzCisgICAgcGxvdF9zZXJpZXM6IHsK
KyAgICAgICAgbmFtZSAgICAgICAgICAgICAgICA6ICcnLAorICAgICAgICBkYXRhICAgICAgICAg
ICAgICAgIDogW10sCisgICAgICAgIHRvb2x0aXA6IHsKKyAgICAgICAgICAgIGhlYWRlckZvcm1h
dCAgICA6ICc8ZW0+e3BvaW50LmtleX08L2VtPjxici8+JworICAgICAgICB9CisgICAgfSwKKyAg
ID0yMAorICAgIC8vIGluaXRpYWxpemUKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHAsIG9w
dGlvbnMpIHsKKyAgICAgICAgdGhpcy5hcHAgICAgICAgID0zRCBhcHA7CisgICAgICAgIHRoaXMu
b3B0aW9ucyAgICA9M0Qgb3B0aW9uczsKKyAgICB9LAorICAgICAgICAgICA9MjAKKyAgICAvLyBy
ZW5kZXIKKyAgICBkcmF3IDogZnVuY3Rpb24ocHJvY2Vzc19pZCwgY2hhcnQsIHJlcXVlc3RfZGlj
dGlvbmFyeSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisgICAgICAg
IHZhciBwbG90ID0zRCBuZXcgVG9vbHMucGFuZWxIZWxwZXIoeworICAgICAgICAgICAgYXBwICAg
ICAgICAgICAgICAgICA6IHRoaXMuYXBwLAorICAgICAgICAgICAgcHJvY2Vzc19pZCAgICAgICAg
ICA6IHByb2Nlc3NfaWQsCisgICAgICAgICAgICBjYW52YXMgICAgICAgICAgICAgIDogdGhpcy5v
cHRpb25zLmNhbnZhcywKKyAgICAgICAgICAgIGNoYXJ0ICAgICAgICAgICAgICAgOiBjaGFydCwK
KyAgICAgICAgICAgIHJlcXVlc3RfZGljdGlvbmFyeSAgOiByZXF1ZXN0X2RpY3Rpb25hcnksCisg
ICAgICAgICAgICByZW5kZXIgICAgICAgICAgICAgIDogZnVuY3Rpb24oZ3JvdXBzLCBjYW52YXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlbmRl
cihjaGFydCwgZ3JvdXBzLCBjYW52PQphcywgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKyAgID0yMAorICAgIC8vIGRyYXcg
YWxsIGRhdGEgaW50byBhIHNpbmdsZSBjYW52YXMKKyAgICByZW5kZXI6IGZ1bmN0aW9uKGNoYXJ0
LCBncm91cHMsIGVsX2NhbnZhcywgY2FsbGJhY2spIHsKKyAgICAgICAgLy8gY3JlYXRlIGNvbmZp
Z3VyYXRpb24KKyAgICAgICAgdmFyIHBsb3RfY29uZmlnID0zRCBjb25maWdtYWtlcihjaGFydCk7
CisgICAgICAgIHZhciBwbG90X2RhdGEgPTNEIFtdCisgICAgICAgPTIwCisgICAgICAgIC8vIGlk
ZW50aWZ5IGNhdGVnb3JpZXMKKyAgICAgICAgdGhpcy5fbWFrZUNhdGVnb3JpZXMoY2hhcnQsIGdy
b3VwcywgcGxvdF9jb25maWcsIHRydWUpOworICAgICAgID0yMAorICAgICAgICAvLyBsb29wIHRo
cm91Z2ggZGF0YSBncm91cHMKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGdyb3VwcykgeworICAg
ICAgICAgICAgLy8gZ2V0IGdyb3VwCisgICAgICAgICAgICB2YXIgZ3JvdXAgPTNEIGdyb3Vwc1tr
ZXldOworICAgICAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIHJlc2V0IGRhdGEKKyAgICAgICAg
ICAgIHZhciBkYXRhID0zRCBUb29scy5tYWtlU2VyaWVzKGdyb3VwLCBbJ3gnLCAneSddKTsKKyAg
ICAgICAgICAgPTIwCisgICAgICAgICAgICAvLyBhcHBlbmQgc2VyaWVzCisgICAgICAgICAgICBw
bG90X2RhdGEucHVzaChkYXRhKTsKKyAgICAgICAgfQorICAgICAgID0yMAorICAgICAgICAvLyBk
cmF3IHBsb3QKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIGNhbnZhcworICAgICAgICAg
ICAgdmFyIGNhbnZhcyA9M0QgZWxfY2FudmFzWzBdOworICAgICAgICAgICA9MjAKKyAgICAgICAg
ICAgIC8vIG1ha2UgY3VzdG9tIHdyYXBwZXIgY2FsbGJhY2sKKyAgICAgICAgICAgIGlmIChjYWxs
YmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHBsb3RfY29uZmlnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICA9MjAKKyAgICAgICAgICAgIC8vIERyYXcgZ3JhcGggd2l0aCBkZWZhdWx0
IG9wdGlvbnMsIG92ZXJ3cml0aW5nIHdpdGggcGFzc2VkIG9wPQp0aW9ucworICAgICAgICAgICAg
ZnVuY3Rpb24gZHJhd0dyYXBoIChvcHRzKSB7CisgICAgICAgICAgICAgICAgZWxfY2FudmFzLmVt
cHR5KCk7CisgICAgICAgICAgICAgICAgdmFyIHBsb3RfY25mID0zRCBfLmV4dGVuZChfLmNsb25l
KHBsb3RfY29uZmlnKSwgb3B0cyB8fCB7fT0KKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGxv
dCA9M0QgJC5qcXBsb3QoJ2NhbnZhcycsIHBsb3RfZGF0YSwgcGxvdF9jbmYpOworICAgICAgICAg
ICAgfQorID0yMAorICAgICAgICAgICAgLy8gZHJhdyBwbG90CisgICAgICAgICAgICB2YXIgcGxv
dCA9M0QgZHJhd0dyYXBoKCk7CisgICAgICAgICAgID0yMAorICAgICAgICAgICAgLy8gY2F0Y2gg
d2luZG93IHJlc2l6ZSBldmVudAorICAgICAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisgICAg
ICAgICAgICAkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBk
cmF3R3JhcGgoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgID0yMAorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgdGhpcy5faGFu
ZGxlRXJyb3IoY2hhcnQsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9LAorICAgPTIwCisgICAgLy8gY3JlYXRlIGNhdGVnb3JpZXMKKyAgICBfbWFrZUNh
dGVnb3JpZXM6IGZ1bmN0aW9uKGNoYXJ0LCBncm91cHMsIHBsb3RfY29uZmlnKSB7CisgICAgICAg
IC8vIHJlc3VsdAorICAgICAgICB2YXIgcmVzdWx0ID0zRCBUb29scy5tYWtlQ2F0ZWdvcmllcyhj
aGFydCwgZ3JvdXBzKTsKKyAgICAgICA9MjAKKyAgICAgICAgLyovIGFkZCBjYXRlZ29yaWVzIHRv
IHBsb3QgY29uZmlndXJhdGlvbgorICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LmFycmF5
KSB7CisgICAgICAgICAgICB2YXIgYXhpcyA9M0Qga2V5ICsgJ2F4aXMnOworICAgICAgICAgICAg
aWYgKHBsb3RfY29uZmlnLmF4ZXNbYXhpc10pIHsKKyAgICAgICAgICAgICAgICBwbG90X2NvbmZp
Zy5heGVzW2F4aXNdLnRpY2tzID0zRCByZXN1bHQuYXJyYXlba2V5XTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSovCisgICAgICAgPTIwCisgICAgICAgIC8vIGFkZCB4IHRpY2sgZm9ybWF0dGVy
CisgICAgICAgIGZ1bmN0aW9uIGF4aXNUaWNrRm9ybWF0dGVyIChheGlzX2NoYXIsIHBsb3RfYXhp
cywgYXhpc190eXBlLCBheGlzXz0KdGljaykgeworICAgICAgICAgICAgLyppZiAoYXhpc190eXBl
ICE9M0QgJ2F1dG8nICYmIGF4aXNfdHlwZSAhPTNEPTNEIHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgIHBsb3RfYXhpcy50aWNrT3B0aW9ucy5mb3JtYXR0ZXIgPTNEIGZ1bmN0aW9uKGZvcm1h
dCwgdmFsdWU9CikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXhpc190eXBlID0zRD0zRCAn
aGlkZScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0ID0zRCBkMy5mb3JtYXQo
YXhpc190aWNrICsgYXhpc190eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1h
dCh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeyovCisgICAgICAg
ICAgICAgICAgaWYgKGNoYXJ0LmRlZmluaXRpb24uY29sdW1uc1theGlzX2NoYXJdLmlzX2xhYmVs
KSB7CisgICAgICAgICAgICAgICAgICAgIHBsb3RfYXhpcy50aWNrT3B0aW9ucy5mb3JtYXR0ZXIg
PTNEIGZ1bmN0aW9uKGZvcm1hdCwgdj0KYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlID0zRD0zRCBwYXJzZUludCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LmFycmF5W2F4aXNfY2hhcl0gIT0zRD0zRCB1bmRlZmluZWQpPQog
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmFycmF5W2F4
aXNfY2hhcl1bdmFsdWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vfQorICAgICAgICB9CisgICAgICAgIGF4aXNUaWNrRm9ybWF0dGVyICgneCcsIHBsb3RfY29u
ZmlnLmF4ZXMueGF4aXMsIGNoYXJ0LnNldHRpbmdzLmdldD0KKCd4X2F4aXNfdHlwZScpLCBjaGFy
dC5zZXR0aW5ncy5nZXQoJ3hfYXhpc190aWNrJykpOworICAgICAgICBheGlzVGlja0Zvcm1hdHRl
ciAoJ3knLCBwbG90X2NvbmZpZy5heGVzLnlheGlzLCBjaGFydC5zZXR0aW5ncy5nZXQ9CigneV9h
eGlzX3R5cGUnKSwgY2hhcnQuc2V0dGluZ3MuZ2V0KCd5X2F4aXNfdGljaycpKTsKKyAgICB9LAor
ICAgPTIwCisgICAgLy8gaGFuZGxlIGVycm9yCisgICAgX2hhbmRsZUVycm9yOiBmdW5jdGlvbihj
aGFydCwgZXJyKSB7CisgICAgICAgIGNoYXJ0LnN0YXRlKCdmYWlsZWQnLCBlcnIpOworICAgIH0K
K30pOworCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUx
OWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJm
YWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0
cy9zdGF0aWMvY2hhcnRzL2pxcGxvdD0KL2xpbmUvY29uZmlnLmpzCi0tLSAvZGV2L251bGwKKysr
IGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvanFw
bG90L2xpbmUvY29uZmlnPQouanMKQEAgLTAsMCArMSwxOSBAQAorZGVmaW5lKFsncGx1Z2luL2No
YXJ0cy9qcXBsb3QvY29tbW9uL2NvbmZpZyddLCBmdW5jdGlvbihwbG90X2NvbmZpZykgeworCity
ZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIHBsb3RfY29uZmlnLCB7CisgICAgdGl0bGUgICAgICAg
OiAnTGluZSBjaGFydCcsCisgICAgY2F0ZWdvcnkgICAgOiAnT3RoZXJzJywKKyAgICBjb2x1bW5z
ICAgICA6IHsKKyAgICAgICAgeCA6IHsKKyAgICAgICAgICAgIHRpdGxlICAgICAgIDogJ1ZhbHVl
cyBmb3IgeC1heGlzJywKKyAgICAgICAgICAgIGlzX2xhYmVsICAgIDogdHJ1ZSwKKyAgICAgICAg
ICAgIGlzX2F1dG8gICAgIDogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB5IDogeworICAgICAg
ICAgICAgdGl0bGUgICA6ICdWYWx1ZXMgZm9yIHktYXhpcycsCisgICAgICAgICAgICBpc19udW1l
cmljICA6IHRydWUKKyAgICAgICAgfQorICAgIH0KK30pOworCit9KTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5
MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdD0KL2xp
bmUvbG9nby5wbmcKQmluYXJ5IGZpbGUgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh
cnRzL3N0YXRpYy9jaGFydHMvanFwbG90L2xpbmUvPQpsb2dvLnBuZyBoYXMgY2hhbmdlZAoKZGlm
ZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFl
MDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9saW5lL3dyYXBwZXIuanMKLS0t
IC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3Rh
dGljL2NoYXJ0cy9qcXBsb3QvbGluZS93cmFwcGU9CnIuanMKQEAgLTAsMCArMSwyMCBAQAorLy8g
ZGVwZW5kZW5jaWVzCitkZWZpbmUoWydwbHVnaW4vY2hhcnRzL2pxcGxvdC9jb21tb24vd3JhcHBl
ciddLCBmdW5jdGlvbihQbG90KSB7CisKKy8vIHdpZGdldAorcmV0dXJuIEJhY2tib25lLlZpZXcu
ZXh0ZW5kKAoreworICAgIC8vIGluaXRpYWxpemUKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihh
cHAsIG9wdGlvbnMpIHsKKyAgICAgICAgdGhpcy5hcHAgICAgICAgID0zRCBhcHA7CisgICAgICAg
IHRoaXMub3B0aW9ucyAgICA9M0Qgb3B0aW9uczsKKyAgICB9LAorICAgICAgICAgICA9MjAKKyAg
ICAvLyByZW5kZXIKKyAgICBkcmF3IDogZnVuY3Rpb24ocHJvY2Vzc19pZCwgY2hhcnQsIHJlcXVl
c3RfZGljdGlvbmFyeSkgeworICAgICAgICB2YXIgcGxvdCA9M0QgbmV3IFBsb3QodGhpcy5hcHAs
IHRoaXMub3B0aW9ucyk7CisgICAgICAgIHBsb3QuZHJhdyhwcm9jZXNzX2lkLCBjaGFydCwgcmVx
dWVzdF9kaWN0aW9uYXJ5KTsKKyAgICB9Cit9KTsKKworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVj
IC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Q9Ci9zY2F0dGVy
L2NvbmZpZy5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdC9zY2F0dGVyL2Nvbj0KZmlnLmpzCkBAIC0w
LDAgKzEsMTggQEAKK2RlZmluZShbJ3BsdWdpbi9jaGFydHMvanFwbG90L2NvbW1vbi9jb25maWcn
XSwgZnVuY3Rpb24ocGxvdF9jb25maWcpIHsKKworcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBw
bG90X2NvbmZpZywgeworICAgIHRpdGxlICAgICAgIDogJ1NjYXR0ZXIgcGxvdCcsCisgICAgY2F0
ZWdvcnkgICAgOiAnT3RoZXJzJywKKyAgICBjb2x1bW5zICAgICA6IHsKKyAgICAgICAgeCA6IHsK
KyAgICAgICAgICAgIHRpdGxlICAgOiAnVmFsdWVzIGZvciB4LWF4aXMnLAorICAgICAgICAgICAg
aXNfbnVtZXJpYyAgOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHkgOiB7CisgICAgICAgICAg
ICB0aXRsZSAgIDogJ1ZhbHVlcyBmb3IgeS1heGlzJywKKyAgICAgICAgICAgIGlzX251bWVyaWMg
IDogdHJ1ZQorICAgICAgICB9CisgICAgfQorfSk7CisKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1
YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNkODBmYmU5MzViYThjMjggY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvanFwbG90PQovc2NhdHRl
ci9sb2dvLnBuZwpCaW5hcnkgZmlsZSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFy
dHMvc3RhdGljL2NoYXJ0cy9qcXBsb3Qvc2NhdHQ9CmVyL2xvZ28ucG5nIGhhcyBjaGFuZ2VkCgpk
aWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5
MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL2pxcGxvdD0KL3NjYXR0ZXIvd3JhcHBlci5q
cwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0
cy9zdGF0aWMvY2hhcnRzL2pxcGxvdC9zY2F0dGVyL3dyYT0KcHBlci5qcwpAQCAtMCwwICsxLDMw
IEBACisvLyBkZXBlbmRlbmNpZXMKK2RlZmluZShbJ3BsdWdpbi9jaGFydHMvanFwbG90L2NvbW1v
bi93cmFwcGVyJ10sIGZ1bmN0aW9uKFBsb3QpIHsKKworLy8gd2lkZ2V0CityZXR1cm4gQmFja2Jv
bmUuVmlldy5leHRlbmQoCit7CisgICAgLy8gaW5pdGlhbGl6ZQorICAgIGluaXRpYWxpemU6IGZ1
bmN0aW9uKGFwcCwgb3B0aW9ucykgeworICAgICAgICB0aGlzLmFwcCAgICAgICAgPTNEIGFwcDsK
KyAgICAgICAgdGhpcy5vcHRpb25zICAgID0zRCBvcHRpb25zOworICAgIH0sCisgICAgICAgICAg
ID0yMAorICAgIC8vIHJlbmRlcgorICAgIGRyYXcgOiBmdW5jdGlvbihwcm9jZXNzX2lkLCBjaGFy
dCwgcmVxdWVzdF9kaWN0aW9uYXJ5KSB7CisgICAgICAgIHZhciBwbG90ID0zRCBuZXcgUGxvdCh0
aGlzLmFwcCwgdGhpcy5vcHRpb25zKTsKKyAgICAgICAgcGxvdC5kcmF3KHByb2Nlc3NfaWQsIGNo
YXJ0LCByZXF1ZXN0X2RpY3Rpb25hcnksIGZ1bmN0aW9uKHBsb3RfY29uPQpmaWcpeworICAgICAg
ICAgICAgJC5leHRlbmQodHJ1ZSwgcGxvdF9jb25maWcsIHsKKyAgICAgICAgICAgICAgICBzZXJp
ZXNEZWZhdWx0czogeworICAgICAgICAgICAgICAgICAgICByZW5kZXJlcjogJC5qcXBsb3QuTGlu
ZVJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICBzaG93TGluZTogZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgIG1hcmtlck9wdGlvbnMgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
aG93ICAgIDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCit9KTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNm
ODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMv
Yj0KYXJfaG9yaXpvbnRhbC9jb25maWcuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9iYXJfaG9yaXpvbnRhPQpsL2NvbmZpZy5q
cworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0
cy9udmQzL2Jhcl9ob3Jpem9udGE9CmwvY29uZmlnLmpzCkBAIC0zLDYgKzMsNyBAQAogcmV0dXJu
ICQuZXh0ZW5kKHRydWUsIHt9LCBudmQzX2NvbmZpZywgewogICAgIHRpdGxlICAgICAgIDogJ0hv
cml6b250YWwnLAogICAgIGNhdGVnb3J5ICAgIDogJ0JhciBkaWFncmFtcycsCisgICAga2V5d29y
ZHMgICAgOiAnZGVmYXVsdCBzbWFsbCcsCiAgICAgY29sdW1ucyAgICAgOiB7CiAgICAgICAgIHgg
OiB7CiAgICAgICAgICAgICB0aXRsZSAgICAgICA6ICdWYWx1ZXMgZm9yIHgtYXhpcycsCgpkaWZm
IC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUw
NWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvYj0KYXJfaG9yaXpvbnRhbF9zdGFja2Vk
L2NvbmZpZy5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3Rh
dGljL2NoYXJ0cy9udmQzL2Jhcl9ob3Jpem9udGE9Cmxfc3RhY2tlZC9jb25maWcuanMKKysrIGIv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9i
YXJfaG9yaXpvbnRhPQpsX3N0YWNrZWQvY29uZmlnLmpzCkBAIC0zLDYgKzMsNyBAQAogcmV0dXJu
ICQuZXh0ZW5kKHRydWUsIHt9LCBudmQzX2NvbmZpZywgewogICAgIHRpdGxlICAgICAgIDogJ1N0
YWNrZWQgaG9yaXpvbnRhbCcsCiAgICAgY2F0ZWdvcnkgICAgOiAnQmFyIGRpYWdyYW1zJywKKyAg
ICBrZXl3b3JkcyAgICA6ICdkZWZhdWx0IHNtYWxsJywKICAgICBzZXR0aW5ncyAgICA6IHsKICAg
ICAgICAgeF9heGlzX3R5cGUgOiB7CiAgICAgICAgICAgICBpbml0IDogJ2hpZGUnCgpkaWZmIC1y
IGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJl
ZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvYj0KYXJfc3RhY2tlZC9jb25maWcuanMKLS0t
IGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZk
My9iYXJfc3RhY2tlZC9jPQpvbmZpZy5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL2Jhcl9zdGFja2VkL2M9Cm9uZmlnLmpzCkBA
IC0zLDYgKzMsNyBAQAogcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBudmQzX2NvbmZpZywgewog
ICAgIHRpdGxlICAgICAgIDogJ1N0YWNrZWQnLAogICAgIGNhdGVnb3J5ICAgIDogJ0JhciBkaWFn
cmFtcycsCisgICAga2V5d29yZHMgICAgOiAnZGVmYXVsdCBzbWFsbCcsCiAgICAgY29sdW1ucyAg
ICAgOiB7CiAgICAgICAgIHkgOiB7CiAgICAgICAgICAgICB0aXRsZSAgIDogJ1ZhbHVlcyBmb3Ig
eS1heGlzJywKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1
YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNkODBmYmU5MzViYThjMjggY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9jPQpvbW1vbi9j
b25maWcuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRp
Yy9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnPQouanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9jb21tb24vY29uZmlnPQouanMK
QEAgLTUsNyArNSw3IEBACiAgICAgY2F0ZWdvcnkgICAgOiAnJywKICAgICBsaWJyYXJ5ICAgICA6
ICdOVkQzJywKICAgICB0YWcgICAgICAgICA6ICdzdmcnLAotICAgIGtleXdvcmRzICAgIDogJ2Rl
ZmF1bHQgbnZkMycsCisgICAga2V5d29yZHMgICAgOiAnc21hbGwnLAogICAgIHNldHRpbmdzICAg
IDogewogICAgICAgICBzZXBhcmF0b3JfbGFiZWwgIDogewogICAgICAgICAgICAgdGl0bGUgICAg
ICAgOiAnWCBheGlzJywKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNl
ZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNkODBmYmU5MzViYThjMjggY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9jPQpv
bW1vbi93cmFwcGVyLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0
cy9zdGF0aWMvY2hhcnRzL252ZDMvY29tbW9uL3dyYXBwZT0Kci5qcworKysgYi9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL2NvbW1vbi93cmFw
cGU9CnIuanMKQEAgLTE5LDcgKzE5LDcgQEAKICAgICAgICAgICAgIGNhbnZhcyAgICAgICAgICAg
ICAgOiB0aGlzLm9wdGlvbnMuY2FudmFzLAogICAgICAgICAgICAgY2hhcnQgICAgICAgICAgICAg
ICA6IGNoYXJ0LAogICAgICAgICAgICAgcmVxdWVzdF9kaWN0aW9uYXJ5ICA6IHJlcXVlc3RfZGlj
dGlvbmFyeSwKLSAgICAgICAgICAgIHJlbmRlciAgICAgICAgICAgICAgOiBmdW5jdGlvbihjaGFy
dCwgZ3JvdXBzLCBjYW52YXMpIHsKKyAgICAgICAgICAgIHJlbmRlciAgICAgICAgICAgICAgOiBm
dW5jdGlvbihncm91cHMsIGNhbnZhcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucmVuZGVyKHR5cGUsIGNoYXJ0LCBncm91cHM9CiwgY2FudmFzLCBj
YWxsYmFjaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICB9KTsK
QEAgLTUzLDExICs1Myw3IEBACiAgICAgICAgICAgICAgICA9MjAKICAgICAgICAgICAgICAgICAv
LyBsZWdlbmQKICAgICAgICAgICAgICAgICBpZiAoZDNjaGFydC5zaG93TGVnZW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBsZWdlbmRfdmlzaWJsZSA9M0QgdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoYXJ0LnNldHRpbmdzLmdldCgnc2hvd19sZWdlbmQnKSA9M0Q9M0QgJ2Zh
bHNlJykgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kX3Zpc2libGUgPTNEIGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGQzY2hhcnQuc2hv
d0xlZ2VuZChsZWdlbmRfdmlzaWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGQzY2hhcnQuc2hv
d0xlZ2VuZChjaGFydC5zZXR0aW5ncy5nZXQoJ3Nob3dfbGVnZW5kJykgPQo9M0Q9M0QgJ3RydWUn
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA9MjAKICAgICAgICAgICAgICAg
ICAvLyBjdXN0b20gY2FsbGJhY2sKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgwOTdiZDNkNWExNDlh
Y2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNkODBmYmU5MzViYThj
MjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZk
My9oPQppc3RvZ3JhbS9jb25maWcuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9oaXN0b2dyYW0vY29uPQpmaWcuanMKKysrIGIv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMvbnZkMy9o
aXN0b2dyYW0vY29uPQpmaWcuanMKQEAgLTUsNiArNSw3IEBACiAgICAgdGl0bGUgICAgICAgOiAn
SGlzdG9ncmFtJywKICAgICBjYXRlZ29yeSAgICA6ICdEYXRhIHByb2Nlc3NpbmcgKHJlcXVpcmVz
IFwnY2hhcnRzXCcgdG9vbCBmcm9tIFRvb2xzaGVkPQopJywKICAgICBleGVjdXRlICAgICA6ICdo
aXN0b2dyYW0nLAorICAgIGtleXdvcmRzICAgIDogJ2RlZmF1bHQgbGFyZ2UnLAogICAgIGNvbHVt
bnMgICAgIDogewogICAgICAgICB5IDogewogICAgICAgICAgICAgdGl0bGUgICA6ICdPYnNlcnZh
dGlvbnMnLAoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVj
IC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL2g9CmlzdG9ncmFt
X2Rpc2NyZXRlL2NvbmZpZy5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9j
aGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL2hpc3RvZ3JhbV9kaXM9CmNyZXRlL2NvbmZpZy5qcwor
KysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9u
dmQzL2hpc3RvZ3JhbV9kaXM9CmNyZXRlL2NvbmZpZy5qcwpAQCAtNCw2ICs0LDcgQEAKICAgICB0
aXRsZSAgICAgICA6ICdEaXNjcmV0ZSBIaXN0b2dyYW0nLAogICAgIGNhdGVnb3J5ICAgIDogJ0Rh
dGEgcHJvY2Vzc2luZyAocmVxdWlyZXMgXCdjaGFydHNcJyB0b29sIGZyb20gVG9vbHNoZWQ9Cikn
LAogICAgIGV4ZWN1dGUgICAgIDogJ2hpc3RvZ3JhbWRpc2NyZXRlJywKKyAgICBrZXl3b3JkcyAg
ICA6ICdkZWZhdWx0IGxhcmdlJywKICAgICBjb2x1bW5zICAgICA6IHsKICAgICAgICAgeCA6IHsK
ICAgICAgICAgICAgIHRpdGxlICAgICAgIDogJ09ic2VydmF0aW9ucycsCgpkaWZmIC1yIGRiOTJm
NmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1
ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2No
YXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvbD0KaW5lX2ZvY3VzL2NvbmZpZy5qcwotLS0gYS9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL2xpbmVf
Zm9jdXMvY289Cm5maWcuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh
cnRzL3N0YXRpYy9jaGFydHMvbnZkMy9saW5lX2ZvY3VzL2NvPQpuZmlnLmpzCkBAIC0zLDcgKzMs
NyBAQAogcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBudmQzX2NvbmZpZywgewogICAgIHRpdGxl
ICAgICAgIDogJ0xpbmUgd2l0aCBmb2N1cycsCiAgICAgY2F0ZWdvcnkgICAgOiAnT3RoZXJzJywK
LSAgICBrZXl3b3JkcyAgICA6ICdkZWZhdWx0IG52ZDMnLAorICAgIGtleXdvcmRzICAgIDogJ2Rl
ZmF1bHQgc21hbGwnLAogICAgIGNvbHVtbnMgICAgIDogewogICAgICAgICB4IDogewogICAgICAg
ICAgICAgdGl0bGUgICAgICAgOiAnVmFsdWVzIGZvciB4LWF4aXMnLAoKZGlmZiAtciBkYjkyZjZl
MTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYy
ZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFy
dHMvc3RhdGljL2NoYXJ0cy9udmQzL3A9CmllL2NvbmZpZy5qcwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL3BpZS9jb25maWcuanMK
KysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFydHMv
bnZkMy9waWUvY29uZmlnLmpzCkBAIC01LDcgKzUsNyBAQAogICAgIGNhdGVnb3J5ICAgIDogJ0Fy
ZWEgY2hhcnRzJywKICAgICBsaWJyYXJ5ICAgICA6ICdOVkQzJywKICAgICB0YWcgICAgICAgICA6
ICdzdmcnLAotICAgIGtleXdvcmRzICAgIDogJ2RlZmF1bHQgbnZkMycsCisgICAga2V5d29yZHMg
ICAgOiAnZGVmYXVsdCBzbWFsbCcsCiAgICAgdXNlX3BhbmVscyAgOiB0cnVlLAogICAgIGNvbHVt
bnMgOiB7CiAgICAgICAgIGxhYmVsIDogewoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1
YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkz
NWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0
cy9udmQzL3M9CnRhY2tlZGFyZWEvY29uZmlnLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvc3RhY2tlZGFyZWEvYz0Kb25maWcu
anMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9jaGFy
dHMvbnZkMy9zdGFja2VkYXJlYS9jPQpvbmZpZy5qcwpAQCAtNCw2ICs0LDcgQEAKICAgICB0aXRs
ZSAgICAgICA6ICdSZWd1bGFyJywKICAgICB6b29tYWJsZSAgICA6ICdheGlzJywKICAgICBjYXRl
Z29yeSAgICA6ICdBcmVhIGNoYXJ0cycsCisgICAga2V5d29yZHMgICAgOiAnZGVmYXVsdCBzbWFs
bCcsCiAgICAgY29sdW1ucyAgICAgOiB7CiAgICAgICAgIHggOiB7CiAgICAgICAgICAgICB0aXRs
ZSAgICAgICA6ICdWYWx1ZXMgZm9yIHgtYXhpcycsCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3
YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgw
ZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMv
Y2hhcnRzL252ZDMvcz0KdGFja2VkYXJlYV9mdWxsL2NvbmZpZy5qcwotLS0gYS9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy9udmQzL3N0YWNrZWRhcmVh
X2Y9CnVsbC9jb25maWcuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh
cnRzL3N0YXRpYy9jaGFydHMvbnZkMy9zdGFja2VkYXJlYV9mPQp1bGwvY29uZmlnLmpzCkBAIC00
LDYgKzQsNyBAQAogICAgIHRpdGxlICAgICAgIDogJ0V4cGFuZGVkJywKICAgICB6b29tYWJsZSAg
ICA6ICdheGlzJywKICAgICBjYXRlZ29yeSAgICA6ICdBcmVhIGNoYXJ0cycsCisgICAga2V5d29y
ZHMgICAgOiAnZGVmYXVsdCBzbWFsbCcsCiAgICAgY29sdW1ucyAgICAgOiB7CiAgICAgICAgIHkg
OiB7CiAgICAgICAgICAgICB0aXRsZSAgICAgICA6ICdWYWx1ZXMgZm9yIHktYXhpcycsCgpkaWZm
IC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUw
NWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvcz0KdGFja2VkYXJlYV9zdHJlYW0vY29u
ZmlnLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMv
Y2hhcnRzL252ZDMvc3RhY2tlZGFyZWFfcz0KdHJlYW0vY29uZmlnLmpzCisrKyBiL2NvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL252ZDMvc3RhY2tlZGFy
ZWFfcz0KdHJlYW0vY29uZmlnLmpzCkBAIC00LDcgKzQsNyBAQAogICAgIHRpdGxlICAgICAgIDog
J1N0cmVhbScsCiAgICAgY2F0ZWdvcnkgICAgOiAnQXJlYSBjaGFydHMnLAogICAgIHpvb21hYmxl
ICAgIDogJ2F4aXMnLAotICAgIGtleXdvcmRzICAgIDogJ2RlZmF1bHQgbnZkMycsCisgICAga2V5
d29yZHMgICAgOiAnZGVmYXVsdCBzbWFsbCcsCiAgICAgc2hvd21heG1pbiAgOiB0cnVlLAogICAg
IGNvbHVtbnMgICAgIDogewogICAgICAgICB5IDogewoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5
N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4
MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGlj
L2NoYXJ0cy90b29scy49CmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2No
YXJ0cy9zdGF0aWMvY2hhcnRzL3Rvb2xzLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvY2hhcnRzL3Rvb2xzLmpzCkBAIC0xOSw3ICsxOSw3IEBACiAg
ICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGNoYXJ0IGhhcyBtdWx0aXBsZSBwYW5lbHMKICAg
ICAgICAgICAgIGlmICghY2hhcnQuZGVmaW5pdGlvbi51c2VfcGFuZWxzICYmIGNoYXJ0LnNldHRp
bmdzLmdldCgndXNlX3BhPQpuZWxzJykgIT0zRD0zRCAndHJ1ZScpIHsKICAgICAgICAgICAgICAg
ICAvLyBkcmF3IGFsbCBncm91cHMgaW50byBhIHNpbmdsZSBwYW5lbAotICAgICAgICAgICAgICAg
IGlmIChyZW5kZXIoY2hhcnQsIHJlcXVlc3RfZGljdGlvbmFyeS5ncm91cHMsIGNhbnZhc1swXSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyKHJlcXVlc3RfZGljdGlvbmFyeS5ncm91cHMs
IGNhbnZhc1swXSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hhcnQuc3RhdGUoJ29rJywgJ0No
YXJ0IGRyYXduLicpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgICAgICAgdmFyIHZhbGlkID0zRCB0cnVlOwogICAg
ICAgICAgICAgICAgIGZvciAodmFyIGdyb3VwX2luZGV4IGluIHJlcXVlc3RfZGljdGlvbmFyeS5n
cm91cHMpIHsKICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwID0zRCByZXF1ZXN0X2RpY3Rp
b25hcnkuZ3JvdXBzW2dyb3VwX2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5k
ZXIoY2hhcnQsIFtncm91cF0sIGNhbnZhc1tncm91cF9pbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcmVuZGVyKFtncm91cF0sIGNhbnZhc1tncm91cF9pbmRleF0pKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZCA9M0QgZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODIsMTYgKzgyLDIzIEBACiB9
Owo9MjAKIC8vIHNlcmllcyBtYWtlcgotZnVuY3Rpb24gbWFrZVNlcmllcyhncm91cCkgeworZnVu
Y3Rpb24gbWFrZVNlcmllcyhncm91cCwgb3JkZXIpIHsKICAgICAvLyByZXNldCBkYXRhCiAgICAg
dmFyIGRhdGEgPTNEIFtdOwotICAgICAgPTIwCisgICA9MjAKICAgICAvLyBmb3JtYXQgY2hhcnQg
ZGF0YQogICAgIGZvciAodmFyIHZhbHVlX2luZGV4IGluIGdyb3VwLnZhbHVlcykgewogICAgICAg
ICAvLyBwYXJzZSBkYXRhCiAgICAgICAgIHZhciBwb2ludCA9M0QgW107Ci0gICAgICAgIGZvciAo
dmFyIGNvbHVtbl9pbmRleCBpbiBncm91cC52YWx1ZXNbdmFsdWVfaW5kZXhdKSB7Ci0gICAgICAg
ICAgICBwb2ludC5wdXNoKGdyb3VwLnZhbHVlc1t2YWx1ZV9pbmRleF1bY29sdW1uX2luZGV4XSk7
CisgICAgICAgIGlmIChvcmRlcikgeworICAgICAgICAgICAgZm9yICh2YXIgb3JkZXJfaW5kZXgg
aW4gb3JkZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uX2luZGV4ID0zRCBvcmRlcltv
cmRlcl9pbmRleF07CisgICAgICAgICAgICAgICAgcG9pbnQucHVzaChncm91cC52YWx1ZXNbdmFs
dWVfaW5kZXhdW2NvbHVtbl9pbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZm9yICh2YXIgY29sdW1uX2luZGV4IGluIGdyb3VwLnZhbHVlc1t2YWx1
ZV9pbmRleF0pIHsKKyAgICAgICAgICAgICAgICBwb2ludC5wdXNoKGdyb3VwLnZhbHVlc1t2YWx1
ZV9pbmRleF1bY29sdW1uX2luZGV4XSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICA9MjAKICAgICAgICAgLy8gYWRkIHRvIGRhdGEKCmRpZmYgLXIgZGI5MmY2ZTE5YjM4MTgwOTdi
ZDNkNWExNDlhY2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVmMmZhYz0KOTNkODBm
YmU5MzViYThjMjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9j
aGFydHMvdHlwZXMuPQpqcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFy
dHMvc3RhdGljL2NoYXJ0cy90eXBlcy5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9jaGFydHMvc3RhdGljL2NoYXJ0cy90eXBlcy5qcwpAQCAtMTIsOSArMTIsOSBAQAogICAg
ICAgICAncGx1Z2luL2NoYXJ0cy9udmQzL2xpbmUvY29uZmlnJywKICAgICAgICAgJ3BsdWdpbi9j
aGFydHMvbnZkMy9zY2F0dGVyL2NvbmZpZycsCiAgICAgICAgICdwbHVnaW4vY2hhcnRzL252ZDMv
c3RhY2tlZGFyZWEvY29uZmlnJywKLSAgICAgICAgJ3BsdWdpbi9jaGFydHMvZmxvdC9iYXIvY29u
ZmlnJywKLSAgICAgICAgJ3BsdWdpbi9jaGFydHMvZHlncmFwaC9iYXIvY29uZmlnJywKLSAgICAg
ICAgJ3BsdWdpbi9jaGFydHMvb3RoZXJzL2JveHBsb3QvY29uZmlnJywKKyAgICAgICAgJ3BsdWdp
bi9jaGFydHMvanFwbG90L2Jhci9jb25maWcnLAorICAgICAgICAncGx1Z2luL2NoYXJ0cy9qcXBs
b3QvbGluZS9jb25maWcnLAorICAgICAgICAncGx1Z2luL2NoYXJ0cy9qcXBsb3Qvc2NhdHRlci9j
b25maWcnCiAgICAgICAgIF0sIGZ1bmN0aW9uKG52ZDNfYmFyLAogICAgICAgICAgICAgICAgICAg
ICBudmQzX2Jhcl9zdGFja2VkLAogICAgICAgICAgICAgICAgICAgICBudmQzX2Jhcl9ob3Jpem9u
dGFsLApAQCAtMjgsOSArMjgsOSBAQAogICAgICAgICAgICAgICAgICAgICBudmQzX2xpbmUsCiAg
ICAgICAgICAgICAgICAgICAgIG52ZDNfc2NhdHRlciwKICAgICAgICAgICAgICAgICAgICAgbnZk
M19zdGFja2VkYXJlYSwKLSAgICAgICAgICAgICAgICAgICAgZmxvdF9iYXIsCi0gICAgICAgICAg
ICAgICAgICAgIGR5Z3JhcGhfYmFyLAotICAgICAgICAgICAgICAgICAgICBvdGhlcnNfYm94cGxv
dAorICAgICAgICAgICAgICAgICAgICBqcXBsb3RfYmFyLAorICAgICAgICAgICAgICAgICAgICBq
cXBsb3RfbGluZSwKKyAgICAgICAgICAgICAgICAgICAganFwbG90X3NjYXR0ZXIKICAgICAgICAg
ICAgICkgewo9MjAKIC8vIHdpZGdldApAQCAtMzgsNiArMzgsNyBAQAogewogICAgIC8vIHR5cGVz
CiAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgJ2pxcGxvdF9iYXInICAgICAgICAgICAgICAgICAg
ICAgICAgOiBqcXBsb3RfYmFyLAogICAgICAgICAnbnZkM19iYXInICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IG52ZDNfYmFyLAogICAgICAgICAnbnZkM19iYXJfc3RhY2tlZCcgICAgICAgICAg
ICAgICAgICA6IG52ZDNfYmFyX3N0YWNrZWQsCiAgICAgICAgICdudmQzX2Jhcl9ob3Jpem9udGFs
JyAgICAgICAgICAgICAgIDogbnZkM19iYXJfaG9yaXpvbnRhbCwKQEAgLTUxLDkgKzUyLDggQEAK
ICAgICAgICAgJ252ZDNfc2NhdHRlcicgICAgICAgICAgICAgICAgICAgICAgOiBudmQzX3NjYXR0
ZXIsCiAgICAgICAgICdudmQzX2hpc3RvZ3JhbScgICAgICAgICAgICAgICAgICAgIDogbnZkM19o
aXN0b2dyYW0sCiAgICAgICAgICdudmQzX2hpc3RvZ3JhbV9kaXNjcmV0ZScgICAgICAgICAgIDog
bnZkM19oaXN0b2dyYW1fZGlzY3JldGUsCi0gICAgICAgICdmbG90X2JhcicgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogZmxvdF9iYXIsCi0gICAgICAgIC8vJ2R5Z3JhcGhfYmFyJyAgICAgICAg
ICAgICAgICAgICAgICAgOiBkeWdyYXBoX2JhciwKLSAgICAgICAgLy8nb3RoZXJzX2JveHBsb3Qn
ICAgICAgICAgICAgICAgICAgICA6IG90aGVyc19ib3hwbG90CisgICAgICAgICdqcXBsb3RfbGlu
ZScgICAgICAgICAgICAgICAgICAgICAgIDoganFwbG90X2xpbmUsCisgICAgICAgICdqcXBsb3Rf
c2NhdHRlcicgICAgICAgICAgICAgICAgICAgIDoganFwbG90X3NjYXR0ZXIKICAgICB9CiB9KTsK
PTIwCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIg
YTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsbz0KdC9qcXVlcnkuanFw
bG90LmNzcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsb3QvanF1ZXJ5LmpxcD0KbG90LmNzcwpAQCAtMCww
ICsxLDEgQEAKKy5qcXBsb3QtdGFyZ2V0e3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiM2NjY7Zm9u
dC1mYW1pbHk6IlRyZWJ1Y2hldCBNUyIsQXJpPQphbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250
LXNpemU6MWVtfS5qcXBsb3QtYXhpc3tmb250LXNpemU6Ljc1ZW19LmpxcGxvdC09CnhheGlze21h
cmdpbi10b3A6MTBweH0uanFwbG90LXgyYXhpc3ttYXJnaW4tYm90dG9tOjEwcHh9LmpxcGxvdC15
YXhpc3ttYXJnaT0Kbi1yaWdodDoxMHB4fS5qcXBsb3QteTJheGlzLC5qcXBsb3QteTNheGlzLC5q
cXBsb3QteTRheGlzLC5qcXBsb3QteTVheGlzLC5qPQpxcGxvdC15NmF4aXMsLmpxcGxvdC15N2F4
aXMsLmpxcGxvdC15OGF4aXMsLmpxcGxvdC15OWF4aXMsLmpxcGxvdC15TWlkQXhpc3s9Cm1hcmdp
bi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9LmpxcGxvdC1heGlzLXRpY2ssLmpxcGxvdC14
YXhpcy10aWNrLC5qcT0KcGxvdC15YXhpcy10aWNrLC5qcXBsb3QteDJheGlzLXRpY2ssLmpxcGxv
dC15MmF4aXMtdGljaywuanFwbG90LXkzYXhpcy10aWNrPQosLmpxcGxvdC15NGF4aXMtdGljaywu
anFwbG90LXk1YXhpcy10aWNrLC5qcXBsb3QteTZheGlzLXRpY2ssLmpxcGxvdC15N2F4aXM9Ci10
aWNrLC5qcXBsb3QteThheGlzLXRpY2ssLmpxcGxvdC15OWF4aXMtdGljaywuanFwbG90LXlNaWRB
eGlzLXRpY2t7cG9zaXRpbz0KbjphYnNvbHV0ZTt3aGl0ZS1zcGFjZTpwcmV9LmpxcGxvdC14YXhp
cy10aWNre3RvcDowO2xlZnQ6MTVweDt2ZXJ0aWNhbC1hbGlnPQpuOnRvcH0uanFwbG90LXgyYXhp
cy10aWNre2JvdHRvbTowO2xlZnQ6MTVweDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmpxcGxvdC09
CnlheGlzLXRpY2t7cmlnaHQ6MDt0b3A6MTVweDt0ZXh0LWFsaWduOnJpZ2h0fS5qcXBsb3QteWF4
aXMtdGljay5qcXBsb3QtYnJlYT0Ka1RpY2t7cmlnaHQ6LTIwcHg7bWFyZ2luLXJpZ2h0OjA7cGFk
ZGluZzoxcHggNXB4IDFweCA1cHg7ei1pbmRleDoyO2ZvbnQtc2l6PQplOjEuNWVtfS5qcXBsb3Qt
eTJheGlzLXRpY2ssLmpxcGxvdC15M2F4aXMtdGljaywuanFwbG90LXk0YXhpcy10aWNrLC5qcXBs
b3Q9Ci15NWF4aXMtdGljaywuanFwbG90LXk2YXhpcy10aWNrLC5qcXBsb3QteTdheGlzLXRpY2ss
LmpxcGxvdC15OGF4aXMtdGljaywuaj0KcXBsb3QteTlheGlzLXRpY2t7bGVmdDowO3RvcDoxNXB4
O3RleHQtYWxpZ246bGVmdH0uanFwbG90LXlNaWRBeGlzLXRpY2t7dGV4PQp0LWFsaWduOmNlbnRl
cjt3aGl0ZS1zcGFjZTpub3dyYXB9LmpxcGxvdC14YXhpcy1sYWJlbHttYXJnaW4tdG9wOjEwcHg7
Zm9udC09CnNpemU6MTFwdDtwb3NpdGlvbjphYnNvbHV0ZX0uanFwbG90LXgyYXhpcy1sYWJlbHtt
YXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaT0KemU6MTFwdDtwb3NpdGlvbjphYnNvbHV0ZX0uanFw
bG90LXlheGlzLWxhYmVse21hcmdpbi1yaWdodDoxMHB4O2ZvbnQtc2l6ZToxPQoxcHQ7cG9zaXRp
b246YWJzb2x1dGV9LmpxcGxvdC15TWlkQXhpcy1sYWJlbHtmb250LXNpemU6MTFwdDtwb3NpdGlv
bjphYnNvbHU9CnRlfS5qcXBsb3QteTJheGlzLWxhYmVsLC5qcXBsb3QteTNheGlzLWxhYmVsLC5q
cXBsb3QteTRheGlzLWxhYmVsLC5qcXBsb3QteT0KNWF4aXMtbGFiZWwsLmpxcGxvdC15NmF4aXMt
bGFiZWwsLmpxcGxvdC15N2F4aXMtbGFiZWwsLmpxcGxvdC15OGF4aXMtbGFiZWwsPQouanFwbG90
LXk5YXhpcy1sYWJlbHtmb250LXNpemU6MTFwdDttYXJnaW4tbGVmdDoxMHB4O3Bvc2l0aW9uOmFi
c29sdXRlfS5qcXA9CmxvdC1tZXRlckdhdWdlLXRpY2t7Zm9udC1zaXplOi43NWVtO2NvbG9yOiM5
OTl9LmpxcGxvdC1tZXRlckdhdWdlLWxhYmVse2Zvbj0KdC1zaXplOjFlbTtjb2xvcjojOTk5fXRh
YmxlLmpxcGxvdC10YWJsZS1sZWdlbmR7bWFyZ2luLXRvcDoxMnB4O21hcmdpbi1ib3R0PQpvbTox
MnB4O21hcmdpbi1sZWZ0OjEycHg7bWFyZ2luLXJpZ2h0OjEycHh9dGFibGUuanFwbG90LXRhYmxl
LWxlZ2VuZCx0YWJsZS49CmpxcGxvdC1jdXJzb3ItbGVnZW5ke2JhY2tncm91bmQtY29sb3I6cmdi
YSgyNTUsMjU1LDI1NSwwLjYpO2JvcmRlcjoxcHggc29saT0KZCAjY2NjO3Bvc2l0aW9uOmFic29s
dXRlO2ZvbnQtc2l6ZTouNzVlbX10ZC5qcXBsb3QtdGFibGUtbGVnZW5ke3ZlcnRpY2FsLWFsPQpp
Z246bWlkZGxlfXRkLmpxcGxvdC1zZXJpZXNUb2dnbGU6aG92ZXIsdGQuanFwbG90LXNlcmllc1Rv
Z2dsZTphY3RpdmV7Y3Vyc289CnI6cG9pbnRlcn0uanFwbG90LXRhYmxlLWxlZ2VuZCAuanFwbG90
LXNlcmllcy1oaWRkZW57dGV4dC1kZWNvcmF0aW9uOmxpbmUtdD0KaHJvdWdofWRpdi5qcXBsb3Qt
dGFibGUtbGVnZW5kLXN3YXRjaC1vdXRsaW5le2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5n
PQo6MXB4fWRpdi5qcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRjaHt3aWR0aDowO2hlaWdodDowO2Jv
cmRlci10b3Atd2lkdGg6NXB4O2I9Cm9yZGVyLWJvdHRvbS13aWR0aDo1cHg7Ym9yZGVyLWxlZnQt
d2lkdGg6NnB4O2JvcmRlci1yaWdodC13aWR0aDo2cHg7Ym9yZGVyLT0KdG9wLXN0eWxlOnNvbGlk
O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWxlZnQtc3R5bGU6c29saWQ7Ym9yZGVy
LXJpPQpnaHQtc3R5bGU6c29saWR9LmpxcGxvdC10aXRsZXt0b3A6MDtsZWZ0OjA7cGFkZGluZy1i
b3R0b206LjVlbTtmb250LXNpemU6MS49CjJlbX10YWJsZS5qcXBsb3QtY3Vyc29yLXRvb2x0aXB7
Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2ZvbnQtc2l6ZTouNzVlbX0uanFwbD0Kb3QtY3Vyc29yLXRv
b2x0aXB7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2ZvbnQtc2l6ZTouNzVlbTt3aGl0ZS1zcGFjZTpu
b3dyYXA7PQpiYWNrZ3JvdW5kOnJnYmEoMjA4LDIwOCwyMDgsMC41KTtwYWRkaW5nOjFweH0uanFw
bG90LWhpZ2hsaWdodGVyLXRvb2x0aXAsLmo9CnFwbG90LWNhbnZhc092ZXJsYXktdG9vbHRpcHti
b3JkZXI6MXB4IHNvbGlkICNjY2M7Zm9udC1zaXplOi43NWVtO3doaXRlLXNwYT0KY2U6bm93cmFw
O2JhY2tncm91bmQ6cmdiYSgyMDgsMjA4LDIwOCwwLjUpO3BhZGRpbmc6MXB4fS5qcXBsb3QtcG9p
bnQtbGFiZWx7PQpmb250LXNpemU6Ljc1ZW07ei1pbmRleDoyfXRkLmpxcGxvdC1jdXJzb3ItbGVn
ZW5kLXN3YXRjaHt2ZXJ0aWNhbC1hbGlnbjptaWQ9CmRsZTt0ZXh0LWFsaWduOmNlbnRlcn1kaXYu
anFwbG90LWN1cnNvci1sZWdlbmQtc3dhdGNoe3dpZHRoOjEuMmVtO2hlaWdodDouNz0KZW19Lmpx
cGxvdC1lcnJvcnt0ZXh0LWFsaWduOmNlbnRlcn0uanFwbG90LWVycm9yLW1lc3NhZ2V7cG9zaXRp
b246cmVsYXRpdmU7PQp0b3A6NDYlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWRpdi5qcXBsb3QtYnVi
YmxlLWxhYmVse2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmc9Ci1sZWZ0OjJweDtwYWRkaW5nLXJpZ2h0
OjJweDtjb2xvcjpyZ2IoMjAlLDIwJSwyMCUpfWRpdi5qcXBsb3QtYnViYmxlLWxhYmVsLj0KanFw
bG90LWJ1YmJsZS1sYWJlbC1oaWdobGlnaHR7YmFja2dyb3VuZDpyZ2JhKDkwJSw5MCUsOTAlLDAu
Nyl9ZGl2LmpxcGxvdC1uPQpvRGF0YS1jb250YWluZXJ7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dy
b3VuZC1jb2xvcjpyZ2JhKDk2JSw5NiUsOTYlLDAuMyl9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1y
IGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3BsdWdpbnMvanFwbG89CnQvanF1ZXJ5Lmpx
cGxvdC5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsb3QvanF1ZXJ5LmpxcD0KbG90LmpzCkBAIC0wLDAg
KzEsMyBAQAorLyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25l
bGxvIHwganBsb3QuY29tCisgICBqc0RhdGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxv
CisgKi8oZnVuY3Rpb24oTCl7dmFyIHU7TC5mbi5lbXB0eUZvcmNlPTNEZnVuY3Rpb24oKXtmb3Io
dmFyIGFoPTNEMCxhaTsoYWk9Cj0zREwodGhpcylbYWhdKSE9M0RudWxsO2FoKyspe2lmKGFpLm5v
ZGVUeXBlPTNEPTNEPTNEMSl7TC5jbGVhbkRhdGEoYWkuZ2V0RT0KbGVtZW50c0J5VGFnTmFtZSgi
KiIpKX1pZihMLmpxcGxvdC51c2VfZXhjYW52YXMpe2FpLm91dGVySFRNTD0zRCIifWVsc2V7d2hp
PQpsZShhaS5maXJzdENoaWxkKXthaS5yZW1vdmVDaGlsZChhaS5maXJzdENoaWxkKX19YWk9M0Ru
dWxsfXJldHVybiBMKHRoaXMpfTs9CkwuZm4ucmVtb3ZlQ2hpbGRGb3JjZT0zRGZ1bmN0aW9uKGFo
KXt3aGlsZShhaC5maXJzdENoaWxkKXt0aGlzLnJlbW92ZUNoaWxkRj0Kb3JjZShhaC5maXJzdENo
aWxkKTthaC5yZW1vdmVDaGlsZChhaC5maXJzdENoaWxkKX19O0wuZm4uanFwbG90PTNEZnVuY3Rp
b24oPQope3ZhciBhaD0zRFtdO3ZhciBhaj0zRFtdO2Zvcih2YXIgYWs9M0QwLGFpPTNEYXJndW1l
bnRzLmxlbmd0aDthazxhaTthaysrKXs9CmlmKEwuaXNBcnJheShhcmd1bWVudHNbYWtdKSl7YWgu
cHVzaChhcmd1bWVudHNbYWtdKX1lbHNle2lmKEwuaXNQbGFpbk9iamVjdD0KKGFyZ3VtZW50c1th
a10pKXthai5wdXNoKGFyZ3VtZW50c1tha10pfX19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihh
bil7dmFyPQogYXQsYXIsYXE9M0RMKHRoaXMpLGFtPTNEYWgubGVuZ3RoLGFsPTNEYWoubGVuZ3Ro
LGFwLGFvO2lmKGFuPGFtKXthcD0zRGFoW2E9Cm5dfWVsc2V7YXA9M0RhbT9haFthbS0xXTpudWxs
fWlmKGFuPGFsKXthbz0zRGFqW2FuXX1lbHNle2FvPTNEYWw/YWpbYWwtMV06bj0KdWxsfWF0PTNE
YXEuYXR0cigiaWQiKTtpZihhdD0zRD0zRD0zRHUpe2F0PTNEImpxcGxvdF90YXJnZXRfIitMLmpx
cGxvdC50YXJnPQpldENvdW50ZXIrKzthcS5hdHRyKCJpZCIsYXQpfWFyPTNETC5qcXBsb3QoYXQs
YXAsYW8pO2FxLmRhdGEoImpxcGxvdCIsYXIpfSk9Cn07TC5qcXBsb3Q9M0RmdW5jdGlvbihhbixh
ayxhaSl7dmFyIGFqPTNEbnVsbCxhaD0zRG51bGw7aWYoYXJndW1lbnRzLmxlbmd0aD0KPTNEPTNE
PTNEMyl7YWo9M0RhazthaD0zRGFpfWVsc2V7aWYoYXJndW1lbnRzLmxlbmd0aD0zRD0zRD0zRDIp
e2lmKEwuaXNBcnJhPQp5KGFrKSl7YWo9M0Rha31lbHNle2lmKEwuaXNQbGFpbk9iamVjdChhaykp
e2FoPTNEYWt9fX19aWYoYWo9M0Q9M0Q9M0RudWxsJiY9CmFoIT0zRD0zRG51bGwmJmFoLmRhdGEp
e2FqPTNEYWguZGF0YX12YXIgYW09M0RuZXcgUigpO0woIiMiK2FuKS5yZW1vdmVDbGFzcz0KKCJq
cXBsb3QtZXJyb3IiKTtpZihMLmpxcGxvdC5jb25maWcuY2F0Y2hFcnJvcnMpe3RyeXthbS5pbml0
KGFuLGFqLGFoKTthbS5kPQpyYXcoKTthbS50aGVtZUVuZ2luZS5pbml0LmNhbGwoYW0pO3JldHVy
biBhbX1jYXRjaChhbCl7dmFyIGFvPTNETC5qcXBsb3QuY289Cm5maWcuZXJyb3JNZXNzYWdlfHxh
bC5tZXNzYWdlO0woIiMiK2FuKS5hcHBlbmQoJzxkaXYgY2xhc3M9M0QianFwbG90LWVycm9yLT0K
bWVzc2FnZSI+JythbysiPC9kaXY+Iik7TCgiIyIrYW4pLmFkZENsYXNzKCJqcXBsb3QtZXJyb3Ii
KTtkb2N1bWVudC5nZXRFbGVtPQplbnRCeUlkKGFuKS5zdHlsZS5iYWNrZ3JvdW5kPTNETC5qcXBs
b3QuY29uZmlnLmVycm9yQmFja2dyb3VuZDtkb2N1bWVudC5nZXQ9CkVsZW1lbnRCeUlkKGFuKS5z
dHlsZS5ib3JkZXI9M0RMLmpxcGxvdC5jb25maWcuZXJyb3JCb3JkZXI7ZG9jdW1lbnQuZ2V0RWxl
bT0KZW50QnlJZChhbikuc3R5bGUuZm9udEZhbWlseT0zREwuanFwbG90LmNvbmZpZy5lcnJvckZv
bnRGYW1pbHk7ZG9jdW1lbnQuZ2V0PQpFbGVtZW50QnlJZChhbikuc3R5bGUuZm9udFNpemU9M0RM
LmpxcGxvdC5jb25maWcuZXJyb3JGb250U2l6ZTtkb2N1bWVudC5nZXQ9CkVsZW1lbnRCeUlkKGFu
KS5zdHlsZS5mb250U3R5bGU9M0RMLmpxcGxvdC5jb25maWcuZXJyb3JGb250U3R5bGU7ZG9jdW1l
bnQuZz0KZXRFbGVtZW50QnlJZChhbikuc3R5bGUuZm9udFdlaWdodD0zREwuanFwbG90LmNvbmZp
Zy5lcnJvckZvbnRXZWlnaHR9fWVsc2V7PQphbS5pbml0KGFuLGFqLGFoKTthbS5kcmF3KCk7YW0u
dGhlbWVFbmdpbmUuaW5pdC5jYWxsKGFtKTtyZXR1cm4gYW19fTtMLmpxcGw9Cm90LnZlcnNpb249
M0QiMS4wLjgiO0wuanFwbG90LnJldmlzaW9uPTNEIjEyNTAiO0wuanFwbG90LnRhcmdldENvdW50
ZXI9M0QxOz0KTC5qcXBsb3QuQ2FudmFzTWFuYWdlcj0zRGZ1bmN0aW9uKCl7aWYodHlwZW9mIEwu
anFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzPQplcz0zRD0zRCJ1bmRlZmluZWQiKXtMLmpxcGxv
dC5DYW52YXNNYW5hZ2VyLmNhbnZhc2VzPTNEW107TC5qcXBsb3QuQ2FudmFzTWE9Cm5hZ2VyLmZy
ZWU9M0RbXX12YXIgYWg9M0RbXTt0aGlzLmdldENhbnZhcz0zRGZ1bmN0aW9uKCl7dmFyIGFrO3Zh
ciBhaj0zRHRydT0KZTtpZighTC5qcXBsb3QudXNlX2V4Y2FudmFzKXtmb3IodmFyIGFsPTNEMCxh
aT0zREwuanFwbG90LkNhbnZhc01hbmFnZXIuY2FuPQp2YXNlcy5sZW5ndGg7YWw8YWk7YWwrKyl7
aWYoTC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlW2FsXT0zRD0zRD0zRHRydWUpe2E9Cmo9M0Rm
YWxzZTthaz0zREwuanFwbG90LkNhbnZhc01hbmFnZXIuY2FudmFzZXNbYWxdO0wuanFwbG90LkNh
bnZhc01hbmFnZXIuZj0KcmVlW2FsXT0zRGZhbHNlO2FoLnB1c2goYWwpO2JyZWFrfX19aWYoYWop
e2FrPTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FuPQp2YXMiKTthaC5wdXNoKEwuanFwbG90
LkNhbnZhc01hbmFnZXIuY2FudmFzZXMubGVuZ3RoKTtMLmpxcGxvdC5DYW52YXNNYW5hZ2U9CnIu
Y2FudmFzZXMucHVzaChhayk7TC5qcXBsb3QuQ2FudmFzTWFuYWdlci5mcmVlLnB1c2goZmFsc2Up
fXJldHVybiBha307dGhpcz0KLmluaXRDYW52YXM9M0RmdW5jdGlvbihhaSl7aWYoTC5qcXBsb3Qu
dXNlX2V4Y2FudmFzKXtyZXR1cm4gd2luZG93Lkdfdm1sQ2FuPQp2YXNNYW5hZ2VyLmluaXRFbGVt
ZW50KGFpKX1yZXR1cm4gYWl9O3RoaXMuZnJlZUFsbENhbnZhc2VzPTNEZnVuY3Rpb24oKXtmb3I9
Cih2YXIgYWo9M0QwLGFpPTNEYWgubGVuZ3RoO2FqPGFpO2FqKyspe3RoaXMuZnJlZUNhbnZhcyhh
aFthal0pfWFoPTNEW119O3RoaT0Kcy5mcmVlQ2FudmFzPTNEZnVuY3Rpb24oYWkpe2lmKEwuanFw
bG90LnVzZV9leGNhbnZhcyYmd2luZG93Lkdfdm1sQ2FudmFzTWFuPQphZ2VyLnVuaW5pdEVsZW1l
bnQhPTNEPTNEdSl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KEwuanFw
bG89CnQuQ2FudmFzTWFuYWdlci5jYW52YXNlc1thaV0pO0wuanFwbG90LkNhbnZhc01hbmFnZXIu
Y2FudmFzZXNbYWldPTNEbnVsbH1lbD0Kc2V7dmFyIGFqPTNETC5qcXBsb3QuQ2FudmFzTWFuYWdl
ci5jYW52YXNlc1thaV07YWouZ2V0Q29udGV4dCgiMmQiKS5jbGVhclJlPQpjdCgwLDAsYWoud2lk
dGgsYWouaGVpZ2h0KTtMKGFqKS51bmJpbmQoKS5yZW1vdmVBdHRyKCJjbGFzcyIpLnJlbW92ZUF0
dHIoInM9CnR5bGUiKTtMKGFqKS5jc3Moe2xlZnQ6IiIsdG9wOiIiLHBvc2l0aW9uOiIifSk7YWou
d2lkdGg9M0QwO2FqLmhlaWdodD0zRDA7TD0KLmpxcGxvdC5DYW52YXNNYW5hZ2VyLmZyZWVbYWld
PTNEdHJ1ZX19fTtMLmpxcGxvdC5sb2c9M0RmdW5jdGlvbigpe2lmKHdpbmRvPQp3LmNvbnNvbGUp
e3dpbmRvdy5jb25zb2xlLmxvZy5hcHBseSh3aW5kb3cuY29uc29sZSxhcmd1bWVudHMpfX07TC5q
cXBsb3QuY289Cm5maWc9M0R7YWRkRG9tUmVmZXJlbmNlOmZhbHNlLGVuYWJsZVBsdWdpbnM6ZmFs
c2UsZGVmYXVsdEhlaWdodDozMDAsZGVmYXVsdD0KV2lkdGg6NDAwLFVUQ0FkanVzdDpmYWxzZSx0
aW1lem9uZU9mZnNldDpuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2ZmPQpzZXQoKSo2
MDAwMCksZXJyb3JNZXNzYWdlOiIiLGVycm9yQmFja2dyb3VuZDoiIixlcnJvckJvcmRlcjoiIixl
cnJvckZvbnRGYW09CmlseToiIixlcnJvckZvbnRTaXplOiIiLGVycm9yRm9udFN0eWxlOiIiLGVy
cm9yRm9udFdlaWdodDoiIixjYXRjaEVycm9yczpmYT0KbHNlLGRlZmF1bHRUaWNrRm9ybWF0U3Ry
aW5nOiIlLjFmIixkZWZhdWx0Q29sb3JzOlsiIzRiYjJjNSIsIiNFQUEyMjgiLCIjYzViPQo0N2Yi
LCIjNTc5NTc1IiwiIzgzOTU1NyIsIiM5NThjMTIiLCIjOTUzNTc5IiwiIzRiNWRlNCIsIiNkOGI4
M2YiLCIjZmY1ODAwIiw9CiIjMDA4NWNjIiwiI2M3NDdhMyIsIiNjZGRmNTQiLCIjRkJEMTc4Iiwi
IzI2QjRFMyIsIiNiZDcwYzciXSxkZWZhdWx0TmVnYXRpdj0KZUNvbG9yczpbIiM0OTg5OTEiLCIj
QzA4ODQwIiwiIzlGOTI3NCIsIiM1NDZENjEiLCIjNjQ2QzRBIiwiIzZGNjYyMSIsIiM2RTNGPQo1
RiIsIiM0RjY0QjAiLCIjQTg5MDUwIiwiI0M0NTkyMyIsIiMxODczOTkiLCIjOTQ1MzgxIiwiIzk1
OUU1QyIsIiNDN0FGN0IiLCI9CiM0NzgzOTYiLCIjOTA3Mjk0Il0sZGFzaExlbmd0aDo0LGdhcExl
bmd0aDo0LGRvdEdhcExlbmd0aDoyLjUsc3JjTG9jYXRpb246Ij0KanFwbG90L3NyYy8iLHBsdWdp
bkxvY2F0aW9uOiJqcXBsb3Qvc3JjL3BsdWdpbnMvIn07TC5qcXBsb3QuYXJyYXlNYXg9M0RmdW5j
PQp0aW9uKGFoKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxhaCl9O0wuanFwbG90LmFycmF5
TWluPTNEZnVuY3Rpb24oYWgpe3I9CmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsYWgpfTtMLmpx
cGxvdC5lbmFibGVQbHVnaW5zPTNETC5qcXBsb3QuY29uZmlnLmVuYT0KYmxlUGx1Z2lucztMLmpx
cGxvdC5zdXBwb3J0X2NhbnZhcz0zRGZ1bmN0aW9uKCl7aWYodHlwZW9mIEwuanFwbG90LnN1cHBv
cnRfPQpjYW52YXMucmVzdWx0PTNEPTNEInVuZGVmaW5lZCIpe0wuanFwbG90LnN1cHBvcnRfY2Fu
dmFzLnJlc3VsdD0zRCEhZG9jdW1lbnQ9Ci5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250
ZXh0fXJldHVybiBMLmpxcGxvdC5zdXBwb3J0X2NhbnZhcy5yZXN1bHR9Oz0KTC5qcXBsb3Quc3Vw
cG9ydF9jYW52YXNfdGV4dD0zRGZ1bmN0aW9uKCl7aWYodHlwZW9mIEwuanFwbG90LnN1cHBvcnRf
Y2FudmFzPQpfdGV4dC5yZXN1bHQ9M0Q9M0QidW5kZWZpbmVkIil7aWYod2luZG93Lkdfdm1sQ2Fu
dmFzTWFuYWdlciE9M0Q9M0R1JiZ3aW5kb3c9Ci5HX3ZtbENhbnZhc01hbmFnZXIuX3ZlcnNpb24+
ODg3KXtMLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0LnJlc3VsdD0zRHRydT0KZX1lbHNle0wu
anFwbG90LnN1cHBvcnRfY2FudmFzX3RleHQucmVzdWx0PTNEISEoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiY2FuPQp2YXMiKS5nZXRDb250ZXh0JiZ0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS49CmZpbGxUZXh0PTNEPTNEImZ1bmN0aW9uIil9
fXJldHVybiBMLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXh0LnJlc3VsdH07TC5qcT0KcGxvdC51
c2VfZXhjYW52YXM9M0QoKCFMLnN1cHBvcnQuYm94TW9kZWx8fCFMLnN1cHBvcnQub2JqZWN0QWxs
fHwhJHN1cHBvcnQuPQpsZWFkaW5nV2hpdGVzcGFjZSkmJiFMLmpxcGxvdC5zdXBwb3J0X2NhbnZh
cygpKT90cnVlOmZhbHNlO0wuanFwbG90LnByZUluaXQ9Ckhvb2tzPTNEW107TC5qcXBsb3QucG9z
dEluaXRIb29rcz0zRFtdO0wuanFwbG90LnByZVBhcnNlT3B0aW9uc0hvb2tzPTNEW107TD0KLmpx
cGxvdC5wb3N0UGFyc2VPcHRpb25zSG9va3M9M0RbXTtMLmpxcGxvdC5wcmVEcmF3SG9va3M9M0Rb
XTtMLmpxcGxvdC5wb3N0PQpEcmF3SG9va3M9M0RbXTtMLmpxcGxvdC5wcmVEcmF3U2VyaWVzSG9v
a3M9M0RbXTtMLmpxcGxvdC5wb3N0RHJhd1Nlcmllc0hvb2s9CnM9M0RbXTtMLmpxcGxvdC5wcmVE
cmF3TGVnZW5kSG9va3M9M0RbXTtMLmpxcGxvdC5hZGRMZWdlbmRSb3dIb29rcz0zRFtdO0wuaj0K
cXBsb3QucHJlU2VyaWVzSW5pdEhvb2tzPTNEW107TC5qcXBsb3QucG9zdFNlcmllc0luaXRIb29r
cz0zRFtdO0wuanFwbG90LnByPQplUGFyc2VTZXJpZXNPcHRpb25zSG9va3M9M0RbXTtMLmpxcGxv
dC5wb3N0UGFyc2VTZXJpZXNPcHRpb25zSG9va3M9M0RbXTtMLmo9CnFwbG90LmV2ZW50TGlzdGVu
ZXJIb29rcz0zRFtdO0wuanFwbG90LnByZURyYXdTZXJpZXNTaGFkb3dIb29rcz0zRFtdO0wuanFw
bD0Kb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcz0zRFtdO0wuanFwbG90LkVsZW1Db250YWlu
ZXI9M0RmdW5jdGlvbigpe3RoaXMuPQpfZWxlbTt0aGlzLl9wbG90V2lkdGg7dGhpcy5fcGxvdEhl
aWdodDt0aGlzLl9wbG90RGltZW5zaW9ucz0zRHtoZWlnaHQ6bnVsbCw9CndpZHRoOm51bGx9fTtM
LmpxcGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PTNEZnVuY3Rpb24o
YWssYT0KbSxhaSxhaixhbil7dGhpcy5fb2Zmc2V0cz0zRGFtO3ZhciBhaD0zRGFpfHwianFwbG90
Ijt2YXIgYWw9M0Rkb2N1bWVudC5jcmVhPQp0ZUVsZW1lbnQoYWspO3RoaXMuX2VsZW09M0RMKGFs
KTt0aGlzLl9lbGVtLmFkZENsYXNzKGFoKTt0aGlzLl9lbGVtLmNzcyhhaik9Cjt0aGlzLl9lbGVt
LmF0dHIoYW4pO2FsPTNEbnVsbDtyZXR1cm4gdGhpcy5fZWxlbX07TC5qcXBsb3QuRWxlbUNvbnRh
aW5lci5wcj0Kb3RvdHlwZS5nZXRXaWR0aD0zRGZ1bmN0aW9uKCl7aWYodGhpcy5fZWxlbSl7cmV0
dXJuIHRoaXMuX2VsZW0ub3V0ZXJXaWR0aCh0PQpydWUpfWVsc2V7cmV0dXJuIG51bGx9fTtMLmpx
cGxvdC5FbGVtQ29udGFpbmVyLnByb3RvdHlwZS5nZXRIZWlnaHQ9M0RmdW5jdGk9Cm9uKCl7aWYo
dGhpcy5fZWxlbSl7cmV0dXJuIHRoaXMuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSl9ZWxzZXtyZXR1
cm4gbnVsbH19Oz0KTC5qcXBsb3QuRWxlbUNvbnRhaW5lci5wcm90b3R5cGUuZ2V0UG9zaXRpb249
M0RmdW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe3JlPQp0dXJuIHRoaXMuX2VsZW0ucG9zaXRpb24o
KX1lbHNle3JldHVybnt0b3A6bnVsbCxsZWZ0Om51bGwsYm90dG9tOm51bGwscmlnaHQ9CjpudWxs
fX19O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldFRvcD0zRGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZz0KZXRQb3NpdGlvbigpLnRvcH07TC5qcXBsb3QuRWxlbUNvbnRhaW5lci5w
cm90b3R5cGUuZ2V0TGVmdD0zRGZ1bmN0aW9uKCl7cmV0PQp1cm4gdGhpcy5nZXRQb3NpdGlvbigp
LmxlZnR9O0wuanFwbG90LkVsZW1Db250YWluZXIucHJvdG90eXBlLmdldEJvdHRvbT0zRGY9CnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbS5jc3MoImJvdHRvbSIpfTtMLmpxcGxvdC5FbGVtQ29u
dGFpbmVyLnByb3RvdHlwZT0KLmdldFJpZ2h0PTNEZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxl
bS5jc3MoInJpZ2h0Iil9O2Z1bmN0aW9uIHcoYWgpe0wuanFwPQpsb3QuRWxlbUNvbnRhaW5lci5j
YWxsKHRoaXMpO3RoaXMubmFtZT0zRGFoO3RoaXMuX3Nlcmllcz0zRFtdO3RoaXMuc2hvdz0zRGY9
CmFsc2U7dGhpcy50aWNrUmVuZGVyZXI9M0RMLmpxcGxvdC5BeGlzVGlja1JlbmRlcmVyO3RoaXMu
dGlja09wdGlvbnM9M0R7fTt0aD0KaXMubGFiZWxSZW5kZXJlcj0zREwuanFwbG90LkF4aXNMYWJl
bFJlbmRlcmVyO3RoaXMubGFiZWxPcHRpb25zPTNEe307dGhpcy5sPQphYmVsPTNEbnVsbDt0aGlz
LnNob3dMYWJlbD0zRHRydWU7dGhpcy5taW49M0RudWxsO3RoaXMubWF4PTNEbnVsbDt0aGlzLmF1
dG89CnNjYWxlPTNEZmFsc2U7dGhpcy5wYWQ9M0QxLjI7dGhpcy5wYWRNYXg9M0RudWxsO3RoaXMu
cGFkTWluPTNEbnVsbDt0aGlzLnRpYz0Ka3M9M0RbXTt0aGlzLm51bWJlclRpY2tzO3RoaXMudGlj
a0ludGVydmFsO3RoaXMucmVuZGVyZXI9M0RMLmpxcGxvdC5MaW5lYXJBPQp4aXNSZW5kZXJlcjt0
aGlzLnJlbmRlcmVyT3B0aW9ucz0zRHt9O3RoaXMuc2hvd1RpY2tzPTNEdHJ1ZTt0aGlzLnNob3dU
aWNrTWE9CnJrcz0zRHRydWU7dGhpcy5zaG93TWlub3JUaWNrcz0zRHRydWU7dGhpcy5kcmF3TWFq
b3JHcmlkbGluZXM9M0R0cnVlO3RoaXMuZD0KcmF3TWlub3JHcmlkbGluZXM9M0RmYWxzZTt0aGlz
LmRyYXdNYWpvclRpY2tNYXJrcz0zRHRydWU7dGhpcy5kcmF3TWlub3JUaWNrPQpNYXJrcz0zRHRy
dWU7dGhpcy51c2VTZXJpZXNDb2xvcj0zRGZhbHNlO3RoaXMuYm9yZGVyV2lkdGg9M0RudWxsO3Ro
aXMuYm9yZGU9CnJDb2xvcj0zRG51bGw7dGhpcy5zY2FsZVRvSGlkZGVuU2VyaWVzPTNEZmFsc2U7
dGhpcy5fZGF0YUJvdW5kcz0zRHttaW46bnVsbD0KLG1heDpudWxsfTt0aGlzLl9pbnRlcnZhbFN0
YXRzPTNEW107dGhpcy5fb2Zmc2V0cz0zRHttaW46bnVsbCxtYXg6bnVsbH07dGhpPQpzLl90aWNr
cz0zRFtdO3RoaXMuX2xhYmVsPTNEbnVsbDt0aGlzLnN5bmNUaWNrcz0zRG51bGw7dGhpcy50aWNr
U3BhY2luZz0zRDc9CjU7dGhpcy5fbWluPTNEbnVsbDt0aGlzLl9tYXg9M0RudWxsO3RoaXMuX3Rp
Y2tJbnRlcnZhbD0zRG51bGw7dGhpcy5fbnVtYmVyVD0KaWNrcz0zRG51bGw7dGhpcy5fX3RpY2tz
PTNEbnVsbDt0aGlzLl9vcHRpb25zPTNEe319dy5wcm90b3R5cGU9M0RuZXcgTC5qcXBsPQpvdC5F
bGVtQ29udGFpbmVyKCk7dy5wcm90b3R5cGUuY29uc3RydWN0b3I9M0R3O3cucHJvdG90eXBlLmlu
aXQ9M0RmdW5jdGlvbig9Cil7aWYoTC5pc0Z1bmN0aW9uKHRoaXMucmVuZGVyZXIpKXt0aGlzLnJl
bmRlcmVyPTNEbmV3IHRoaXMucmVuZGVyZXIoKX10aGlzLj0KdGlja09wdGlvbnMuYXhpcz0zRHRo
aXMubmFtZTtpZih0aGlzLnRpY2tPcHRpb25zLnNob3dNYXJrPTNEPTNEbnVsbCl7dGhpcy50PQpp
Y2tPcHRpb25zLnNob3dNYXJrPTNEdGhpcy5zaG93VGlja3N9aWYodGhpcy50aWNrT3B0aW9ucy5z
aG93TWFyaz0zRD0zRG51bGw9Cil7dGhpcy50aWNrT3B0aW9ucy5zaG93TWFyaz0zRHRoaXMuc2hv
d1RpY2tNYXJrc31pZih0aGlzLnRpY2tPcHRpb25zLnNob3dMYT0KYmVsPTNEPTNEbnVsbCl7dGhp
cy50aWNrT3B0aW9ucy5zaG93TGFiZWw9M0R0aGlzLnNob3dUaWNrc31pZih0aGlzLmxhYmVsPTNE
PQo9M0RudWxsfHx0aGlzLmxhYmVsPTNEPTNEIiIpe3RoaXMuc2hvd0xhYmVsPTNEZmFsc2V9ZWxz
ZXt0aGlzLmxhYmVsT3B0aW9ucy49CmxhYmVsPTNEdGhpcy5sYWJlbH1pZih0aGlzLnNob3dMYWJl
bD0zRD0zRGZhbHNlKXt0aGlzLmxhYmVsT3B0aW9ucy5zaG93PTNEZj0KYWxzZX1pZih0aGlzLnBh
ZD0zRD0zRDApe3RoaXMucGFkPTNEMX1pZih0aGlzLnBhZE1heD0zRD0zRDApe3RoaXMucGFkTWF4
PTNEPQoxfWlmKHRoaXMucGFkTWluPTNEPTNEMCl7dGhpcy5wYWRNaW49M0QxfWlmKHRoaXMucGFk
TWF4PTNEPTNEbnVsbCl7dGhpcy5wYWQ9Ck1heD0zRCh0aGlzLnBhZC0xKS8yKzF9aWYodGhpcy5w
YWRNaW49M0Q9M0RudWxsKXt0aGlzLnBhZE1pbj0zRCh0aGlzLnBhZC0xKT0KLzIrMX10aGlzLnBh
ZD0zRHRoaXMucGFkTWF4K3RoaXMucGFkTWluLTE7aWYodGhpcy5taW4hPTNEbnVsbHx8dGhpcy5t
YXghPTNEPQpudWxsKXt0aGlzLmF1dG9zY2FsZT0zRGZhbHNlfWlmKHRoaXMuc3luY1RpY2tzPTNE
PTNEbnVsbCYmdGhpcy5uYW1lLmluZGV4T2Y9CigieSIpPi0xKXt0aGlzLnN5bmNUaWNrcz0zRHRy
dWV9ZWxzZXtpZih0aGlzLnN5bmNUaWNrcz0zRD0zRG51bGwpe3RoaXMuc3luYz0KVGlja3M9M0Rm
YWxzZX19dGhpcy5yZW5kZXJlci5pbml0LmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyT3B0aW9ucyl9
O3cucHJvdG90PQp5cGUuZHJhdz0zRGZ1bmN0aW9uKGFoLGFpKXtpZih0aGlzLl9fdGlja3Mpe3Ro
aXMuX190aWNrcz0zRG51bGx9cmV0dXJuIHRoaXM9Ci5yZW5kZXJlci5kcmF3LmNhbGwodGhpcyxh
aCxhaSl9O3cucHJvdG90eXBlLnNldD0zRGZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlcj0KLnNldC5j
YWxsKHRoaXMpfTt3LnByb3RvdHlwZS5wYWNrPTNEZnVuY3Rpb24oYWksYWgpe2lmKHRoaXMuc2hv
dyl7dGhpcy5yZW5kPQplcmVyLnBhY2suY2FsbCh0aGlzLGFpLGFoKX1pZih0aGlzLl9taW49M0Q9
M0RudWxsKXt0aGlzLl9taW49M0R0aGlzLm1pbjt0aGk9CnMuX21heD0zRHRoaXMubWF4O3RoaXMu
X3RpY2tJbnRlcnZhbD0zRHRoaXMudGlja0ludGVydmFsO3RoaXMuX251bWJlclRpY2tzPQo9M0R0
aGlzLm51bWJlclRpY2tzO3RoaXMuX190aWNrcz0zRHRoaXMuX3RpY2tzfX07dy5wcm90b3R5cGUu
cmVzZXQ9M0RmdW5jdGk9Cm9uKCl7dGhpcy5yZW5kZXJlci5yZXNldC5jYWxsKHRoaXMpfTt3LnBy
b3RvdHlwZS5yZXNldFNjYWxlPTNEZnVuY3Rpb24oYWgpez0KTC5leHRlbmQodHJ1ZSx0aGlzLHtt
aW46bnVsbCxtYXg6bnVsbCxudW1iZXJUaWNrczpudWxsLHRpY2tJbnRlcnZhbDpudWxsLF90PQpp
Y2tzOltdLHRpY2tzOltdfSxhaCk7dGhpcy5yZXNldERhdGFCb3VuZHMoKX07dy5wcm90b3R5cGUu
cmVzZXREYXRhQm91bmRzPQo9M0RmdW5jdGlvbigpe3ZhciBhbz0zRHRoaXMuX2RhdGFCb3VuZHM7
YW8ubWluPTNEbnVsbDthby5tYXg9M0RudWxsO3ZhciBhaSw9CmFwLGFtO3ZhciBhaj0zRCh0aGlz
LnNob3cpP3RydWU6ZmFsc2U7Zm9yKHZhciBhbD0zRDA7YWw8dGhpcy5fc2VyaWVzLmxlbmd0aD0K
O2FsKyspe2FwPTNEdGhpcy5fc2VyaWVzW2FsXTtpZihhcC5zaG93fHx0aGlzLnNjYWxlVG9IaWRk
ZW5TZXJpZXMpe2FtPTNEYXAuPQpfcGxvdERhdGE7aWYoYXAuX3R5cGU9M0Q9M0Q9M0QibGluZSIm
JmFwLnJlbmRlcmVyLmJhbmRzLnNob3cmJnRoaXMubmFtZS5jaGE9CnJBdCgwKSE9M0Q9M0QieCIp
e2FtPTNEW1swLGFwLnJlbmRlcmVyLmJhbmRzLl9taW5dLFsxLGFwLnJlbmRlcmVyLmJhbmRzLl9t
YT0KeF1dfXZhciBhaD0zRDEsYW49M0QxO2lmKGFwLl90eXBlIT0zRG51bGwmJmFwLl90eXBlPTNE
PTNEIm9obGMiKXthaD0zRDM7YW49Cj0zRDJ9Zm9yKHZhciBhaz0zRDAsYWk9M0RhbS5sZW5ndGg7
YWs8YWk7YWsrKyl7aWYodGhpcy5uYW1lPTNEPTNEInhheGlzInx8dD0KaGlzLm5hbWU9M0Q9M0Qi
eDJheGlzIil7aWYoKGFtW2FrXVswXSE9M0RudWxsJiZhbVtha11bMF08YW8ubWluKXx8YW8ubWlu
PTNEPQo9M0RudWxsKXthby5taW49M0RhbVtha11bMF19aWYoKGFtW2FrXVswXSE9M0RudWxsJiZh
bVtha11bMF0+YW8ubWF4KXx8YW8ubWE9Cng9M0Q9M0RudWxsKXthby5tYXg9M0RhbVtha11bMF19
fWVsc2V7aWYoKGFtW2FrXVthaF0hPTNEbnVsbCYmYW1bYWtdW2FoXTxhbz0KLm1pbil8fGFvLm1p
bj0zRD0zRG51bGwpe2FvLm1pbj0zRGFtW2FrXVthaF19aWYoKGFtW2FrXVthbl0hPTNEbnVsbCYm
YW1bYWtdPQpbYW5dPmFvLm1heCl8fGFvLm1heD0zRD0zRG51bGwpe2FvLm1heD0zRGFtW2FrXVth
bl19fX1pZihhaiYmYXAucmVuZGVyZXIuY289Cm5zdHJ1Y3RvciE9M0Q9M0RMLmpxcGxvdC5CYXJS
ZW5kZXJlcil7YWo9M0RmYWxzZX1lbHNle2lmKGFqJiZ0aGlzLl9vcHRpb25zLj0KaGFzT3duUHJv
cGVydHkoImZvcmNlVGlja0F0MCIpJiZ0aGlzLl9vcHRpb25zLmZvcmNlVGlja0F0MD0zRD0zRGZh
bHNlKXthaj0KPTNEZmFsc2V9ZWxzZXtpZihhaiYmYXAucmVuZGVyZXIuY29uc3RydWN0b3I9M0Q9
M0Q9M0RMLmpxcGxvdC5CYXJSZW5kZXJlcil7PQppZihhcC5iYXJEaXJlY3Rpb249M0Q9M0QidmVy
dGljYWwiJiZ0aGlzLm5hbWUhPTNEInhheGlzIiYmdGhpcy5uYW1lIT0zRCJ4MmE9CnhpcyIpe2lm
KHRoaXMuX29wdGlvbnMucGFkIT0zRG51bGx8fHRoaXMuX29wdGlvbnMucGFkTWluIT0zRG51bGwp
e2FqPTNEZmFscz0KZX19ZWxzZXtpZihhcC5iYXJEaXJlY3Rpb249M0Q9M0QiaG9yaXpvbnRhbCIm
Jih0aGlzLm5hbWU9M0Q9M0QieGF4aXMifHx0aGlzPQoubmFtZT0zRD0zRCJ4MmF4aXMiKSl7aWYo
dGhpcy5fb3B0aW9ucy5wYWQhPTNEbnVsbHx8dGhpcy5fb3B0aW9ucy5wYWRNaW4hPQo9M0RudWxs
KXthaj0zRGZhbHNlfX19fX19fX1pZihhaiYmdGhpcy5yZW5kZXJlci5jb25zdHJ1Y3Rvcj0zRD0z
RD0zREwuanFwbG89CnQuTGluZWFyQXhpc1JlbmRlcmVyJiZhby5taW4+PTNEMCl7dGhpcy5wYWRN
aW49M0QxO3RoaXMuZm9yY2VUaWNrQXQwPTNEdHJ1ZT0KfX07ZnVuY3Rpb24gcShhaCl7TC5qcXBs
b3QuRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMuc2hvdz0zRGZhbHNlO3RoaXMuPQpsb2Nh
dGlvbj0zRCJuZSI7dGhpcy5sYWJlbHM9M0RbXTt0aGlzLnNob3dMYWJlbHM9M0R0cnVlO3RoaXMu
c2hvd1N3YXRjaGVzPQo9M0R0cnVlO3RoaXMucGxhY2VtZW50PTNEImluc2lkZUdyaWQiO3RoaXMu
eG9mZnNldD0zRDA7dGhpcy55b2Zmc2V0PTNEMDt0aGk9CnMuYm9yZGVyO3RoaXMuYmFja2dyb3Vu
ZDt0aGlzLnRleHRDb2xvcjt0aGlzLmZvbnRGYW1pbHk7dGhpcy5mb250U2l6ZTt0aGlzLj0Kcm93
U3BhY2luZz0zRCIwLjVlbSI7dGhpcy5yZW5kZXJlcj0zREwuanFwbG90LlRhYmxlTGVnZW5kUmVu
ZGVyZXI7dGhpcy5yZW5kPQplcmVyT3B0aW9ucz0zRHt9O3RoaXMucHJlRHJhdz0zRGZhbHNlO3Ro
aXMubWFyZ2luVG9wPTNEbnVsbDt0aGlzLm1hcmdpblJpZ2g9CnQ9M0RudWxsO3RoaXMubWFyZ2lu
Qm90dG9tPTNEbnVsbDt0aGlzLm1hcmdpbkxlZnQ9M0RudWxsO3RoaXMuZXNjYXBlSHRtbD0zRD0K
ZmFsc2U7dGhpcy5fc2VyaWVzPTNEW107TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX1xLnByb3RvdHlw
ZT0zRG5ldyBMLmpxcGxvdC5FPQpsZW1Db250YWluZXIoKTtxLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
cj0zRHE7cS5wcm90b3R5cGUuc2V0T3B0aW9ucz0zRGZ1bmN0aW89Cm4oYWgpe0wuZXh0ZW5kKHRy
dWUsdGhpcyxhaCk7aWYodGhpcy5wbGFjZW1lbnQ9M0Q9M0QiaW5zaWRlIil7dGhpcy5wbGFjZW1l
bj0KdD0zRCJpbnNpZGVHcmlkIn1pZih0aGlzLnhvZmZzZXQ+MCl7aWYodGhpcy5wbGFjZW1lbnQ9
M0Q9M0QiaW5zaWRlR3JpZCIpe3N3PQppdGNoKHRoaXMubG9jYXRpb24pe2Nhc2UibnciOmNhc2Ui
dyI6Y2FzZSJzdyI6aWYodGhpcy5tYXJnaW5MZWZ0PTNEPTNEbnVsbCk9Cnt0aGlzLm1hcmdpbkxl
ZnQ9M0R0aGlzLnhvZmZzZXQrInB4In10aGlzLm1hcmdpblJpZ2h0PTNEIjBweCI7YnJlYWs7Y2Fz
ZSJuZT0KIjpjYXNlImUiOmNhc2Uic2UiOmRlZmF1bHQ6aWYodGhpcy5tYXJnaW5SaWdodD0zRD0z
RG51bGwpe3RoaXMubWFyZ2luUmlnaHQ9Cj0zRHRoaXMueG9mZnNldCsicHgifXRoaXMubWFyZ2lu
TGVmdD0zRCIwcHgiO2JyZWFrfX1lbHNle2lmKHRoaXMucGxhY2VtZW50PQo9M0Q9M0Qib3V0c2lk
ZSIpe3N3aXRjaCh0aGlzLmxvY2F0aW9uKXtjYXNlIm53IjpjYXNlInciOmNhc2Uic3ciOmlmKHRo
aXMubWE9CnJnaW5SaWdodD0zRD0zRG51bGwpe3RoaXMubWFyZ2luUmlnaHQ9M0R0aGlzLnhvZmZz
ZXQrInB4In10aGlzLm1hcmdpbkxlZnQ9Cj0zRCIwcHgiO2JyZWFrO2Nhc2UibmUiOmNhc2UiZSI6
Y2FzZSJzZSI6ZGVmYXVsdDppZih0aGlzLm1hcmdpbkxlZnQ9M0Q9M0RudT0KbGwpe3RoaXMubWFy
Z2luTGVmdD0zRHRoaXMueG9mZnNldCsicHgifXRoaXMubWFyZ2luUmlnaHQ9M0QiMHB4IjticmVh
a319fXRoPQppcy54b2Zmc2V0PTNEMH1pZih0aGlzLnlvZmZzZXQ+MCl7aWYodGhpcy5wbGFjZW1l
bnQ9M0Q9M0Qib3V0c2lkZSIpe3N3aXRjaCg9CnRoaXMubG9jYXRpb24pe2Nhc2Uic3ciOmNhc2Ui
cyI6Y2FzZSJzZSI6aWYodGhpcy5tYXJnaW5Ub3A9M0Q9M0RudWxsKXt0aGlzLj0KbWFyZ2luVG9w
PTNEdGhpcy55b2Zmc2V0KyJweCJ9dGhpcy5tYXJnaW5Cb3R0b209M0QiMHB4IjticmVhaztjYXNl
Im5lIjpjYXNlPQoibiI6Y2FzZSJudyI6ZGVmYXVsdDppZih0aGlzLm1hcmdpbkJvdHRvbT0zRD0z
RG51bGwpe3RoaXMubWFyZ2luQm90dG9tPTNEdGg9CmlzLnlvZmZzZXQrInB4In10aGlzLm1hcmdp
blRvcD0zRCIwcHgiO2JyZWFrfX1lbHNle2lmKHRoaXMucGxhY2VtZW50PTNEPTNEIj0KaW5zaWRl
R3JpZCIpe3N3aXRjaCh0aGlzLmxvY2F0aW9uKXtjYXNlInN3IjpjYXNlInMiOmNhc2Uic2UiOmlm
KHRoaXMubWFyZ2luPQpCb3R0b209M0Q9M0RudWxsKXt0aGlzLm1hcmdpbkJvdHRvbT0zRHRoaXMu
eW9mZnNldCsicHgifXRoaXMubWFyZ2luVG9wPTNEIjA9CnB4IjticmVhaztjYXNlIm5lIjpjYXNl
Im4iOmNhc2UibnciOmRlZmF1bHQ6aWYodGhpcy5tYXJnaW5Ub3A9M0Q9M0RudWxsKXt0aD0KaXMu
bWFyZ2luVG9wPTNEdGhpcy55b2Zmc2V0KyJweCJ9dGhpcy5tYXJnaW5Cb3R0b209M0QiMHB4Ijti
cmVha319fXRoaXMueW9mPQpmc2V0PTNEMH19O3EucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlvbigp
e2lmKEwuaXNGdW5jdGlvbih0aGlzLnJlbmRlcmVyKSl7dGg9CmlzLnJlbmRlcmVyPTNEbmV3IHRo
aXMucmVuZGVyZXIoKX10aGlzLnJlbmRlcmVyLmluaXQuY2FsbCh0aGlzLHRoaXMucmVuZGVyZT0K
ck9wdGlvbnMpfTtxLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24oYWksYWope2Zvcih2YXIgYWg9
M0QwO2FoPEwuanFwbG90LnByPQplRHJhd0xlZ2VuZEhvb2tzLmxlbmd0aDthaCsrKXtMLmpxcGxv
dC5wcmVEcmF3TGVnZW5kSG9va3NbYWhdLmNhbGwodGhpcyxhaSk9Cn1yZXR1cm4gdGhpcy5yZW5k
ZXJlci5kcmF3LmNhbGwodGhpcyxhaSxhail9O3EucHJvdG90eXBlLnBhY2s9M0RmdW5jdGlvbihh
aD0KKXt0aGlzLnJlbmRlcmVyLnBhY2suY2FsbCh0aGlzLGFoKX07ZnVuY3Rpb24geShhaCl7TC5q
cXBsb3QuRWxlbUNvbnRhaW5lci5jPQphbGwodGhpcyk7dGhpcy50ZXh0PTNEYWg7dGhpcy5zaG93
PTNEdHJ1ZTt0aGlzLmZvbnRGYW1pbHk7dGhpcy5mb250U2l6ZTt0aGk9CnMudGV4dEFsaWduO3Ro
aXMudGV4dENvbG9yO3RoaXMucmVuZGVyZXI9M0RMLmpxcGxvdC5EaXZUaXRsZVJlbmRlcmVyO3Ro
aXMucj0KZW5kZXJlck9wdGlvbnM9M0R7fTt0aGlzLmVzY2FwZUh0bWw9M0RmYWxzZX15LnByb3Rv
dHlwZT0zRG5ldyBMLmpxcGxvdC5FbGVtPQpDb250YWluZXIoKTt5LnByb3RvdHlwZS5jb25zdHJ1
Y3Rvcj0zRHk7eS5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKCl7aWYoTC49CmlzRnVuY3Rpb24o
dGhpcy5yZW5kZXJlcikpe3RoaXMucmVuZGVyZXI9M0RuZXcgdGhpcy5yZW5kZXJlcigpfXRoaXMu
cmVuZGVyZT0Kci5pbml0LmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyT3B0aW9ucyl9O3kucHJvdG90
eXBlLmRyYXc9M0RmdW5jdGlvbihhaCl7cmV0PQp1cm4gdGhpcy5yZW5kZXJlci5kcmF3LmNhbGwo
dGhpcyxhaCl9O3kucHJvdG90eXBlLnBhY2s9M0RmdW5jdGlvbigpe3RoaXMucmU9Cm5kZXJlci5w
YWNrLmNhbGwodGhpcyl9O2Z1bmN0aW9uIFMoYWgpe2FoPTNEYWh8fHt9O0wuanFwbG90LkVsZW1D
b250YWluZXIuYz0KYWxsKHRoaXMpO3RoaXMuc2hvdz0zRHRydWU7dGhpcy54YXhpcz0zRCJ4YXhp
cyI7dGhpcy5feGF4aXM7dGhpcy55YXhpcz0zRCJ5PQpheGlzIjt0aGlzLl95YXhpczt0aGlzLmdy
aWRCb3JkZXJXaWR0aD0zRDI7dGhpcy5yZW5kZXJlcj0zREwuanFwbG90LkxpbmVSZW49CmRlcmVy
O3RoaXMucmVuZGVyZXJPcHRpb25zPTNEe307dGhpcy5kYXRhPTNEW107dGhpcy5ncmlkRGF0YT0z
RFtdO3RoaXMubGFiZT0KbD0zRCIiO3RoaXMuc2hvd0xhYmVsPTNEdHJ1ZTt0aGlzLmNvbG9yO3Ro
aXMubmVnYXRpdmVDb2xvcjt0aGlzLmxpbmVXaWR0aD0KPTNEMi41O3RoaXMubGluZUpvaW49M0Qi
cm91bmQiO3RoaXMubGluZUNhcD0zRCJyb3VuZCI7dGhpcy5saW5lUGF0dGVybj0zRCJzPQpvbGlk
Ijt0aGlzLnNoYWRvdz0zRHRydWU7dGhpcy5zaGFkb3dBbmdsZT0zRDQ1O3RoaXMuc2hhZG93T2Zm
c2V0PTNEMS4yNTt0aGk9CnMuc2hhZG93RGVwdGg9M0QzO3RoaXMuc2hhZG93QWxwaGE9M0QiMC4x
Ijt0aGlzLmJyZWFrT25OdWxsPTNEZmFsc2U7dGhpcy5tYT0KcmtlclJlbmRlcmVyPTNETC5qcXBs
b3QuTWFya2VyUmVuZGVyZXI7dGhpcy5tYXJrZXJPcHRpb25zPTNEe307dGhpcy5zaG93TGluPQpl
PTNEdHJ1ZTt0aGlzLnNob3dNYXJrZXI9M0R0cnVlO3RoaXMuaW5kZXg7dGhpcy5maWxsPTNEZmFs
c2U7dGhpcy5maWxsQ29sb3I9Cjt0aGlzLmZpbGxBbHBoYTt0aGlzLmZpbGxBbmRTdHJva2U9M0Rm
YWxzZTt0aGlzLmRpc2FibGVTdGFjaz0zRGZhbHNlO3RoaXMuXz0Kc3RhY2s9M0RmYWxzZTt0aGlz
Lm5laWdoYm9yVGhyZXNob2xkPTNENDt0aGlzLmZpbGxUb1plcm89M0RmYWxzZTt0aGlzLmZpbGxU
PQpvVmFsdWU9M0QwO3RoaXMuZmlsbEF4aXM9M0QieSI7dGhpcy51c2VOZWdhdGl2ZUNvbG9ycz0z
RHRydWU7dGhpcy5fc3RhY2tEYXQ9CmE9M0RbXTt0aGlzLl9wbG90RGF0YT0zRFtdO3RoaXMuX3Bs
b3RWYWx1ZXM9M0R7eDpbXSx5OltdfTt0aGlzLl9pbnRlcnZhbHM9Cj0zRHt4Ont9LHk6e319O3Ro
aXMuX3ByZXZQbG90RGF0YT0zRFtdO3RoaXMuX3ByZXZHcmlkRGF0YT0zRFtdO3RoaXMuX3N0YWNr
QT0KeGlzPTNEInkiO3RoaXMuX3ByaW1hcnlBeGlzPTNEIl94YXhpcyI7dGhpcy5jYW52YXM9M0Ru
ZXcgTC5qcXBsb3QuR2VuZXJpY0NhPQpudmFzKCk7dGhpcy5zaGFkb3dDYW52YXM9M0RuZXcgTC5q
cXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMucGx1Z2lucz0zRHt9O3Q9Cmhpcy5fc3VteT0zRDA7
dGhpcy5fc3VteD0zRDA7dGhpcy5fdHlwZT0zRCIifVMucHJvdG90eXBlPTNEbmV3IEwuanFwbG90
LkVsZT0KbUNvbnRhaW5lcigpO1MucHJvdG90eXBlLmNvbnN0cnVjdG9yPTNEUztTLnByb3RvdHlw
ZS5pbml0PTNEZnVuY3Rpb24oYWssYW8sPQphbSl7dGhpcy5pbmRleD0zRGFrO3RoaXMuZ3JpZEJv
cmRlcldpZHRoPTNEYW87dmFyIGFuPTNEdGhpcy5kYXRhO3ZhciBhaj0zRFs9Cl0sYWwsYWg7Zm9y
KGFsPTNEMCxhaD0zRGFuLmxlbmd0aDthbDxhaDthbCsrKXtpZighdGhpcy5icmVha09uTnVsbCl7
aWYoYW5bYT0KbF09M0Q9M0RudWxsfHxhblthbF1bMF09M0Q9M0RudWxsfHxhblthbF1bMV09M0Q9
M0RudWxsKXtjb250aW51ZX1lbHNle2FqLnB1PQpzaChhblthbF0pfX1lbHNle2FqLnB1c2goYW5b
YWxdKX19dGhpcy5kYXRhPTNEYWo7aWYoIXRoaXMuY29sb3Ipe3RoaXMuY29sb3I9Cj0zRGFtLmNv
bG9yR2VuZXJhdG9yLmdldCh0aGlzLmluZGV4KX1pZighdGhpcy5uZWdhdGl2ZUNvbG9yKXt0aGlz
Lm5lZ2F0aXZlQz0Kb2xvcj0zRGFtLm5lZ2F0aXZlQ29sb3JHZW5lcmF0b3IuZ2V0KHRoaXMuaW5k
ZXgpfWlmKCF0aGlzLmZpbGxDb2xvcil7dGhpcy5mPQppbGxDb2xvcj0zRHRoaXMuY29sb3J9aWYo
dGhpcy5maWxsQWxwaGEpe3ZhciBhaT0zREwuanFwbG90Lm5vcm1hbGl6ZTJyZ2IodGg9CmlzLmZp
bGxDb2xvcik7dmFyIGFpPTNETC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnRzKGFpKTt0aGlzLmZp
bGxDb2xvcj0zRCJyZz0KYmEoIithaVswXSsiLCIrYWlbMV0rIiwiK2FpWzJdKyIsIit0aGlzLmZp
bGxBbHBoYSsiKSJ9aWYoTC5pc0Z1bmN0aW9uKHRoaXMuPQpyZW5kZXJlcikpe3RoaXMucmVuZGVy
ZXI9M0RuZXcgdGhpcy5yZW5kZXJlcigpfXRoaXMucmVuZGVyZXIuaW5pdC5jYWxsKHRoaXM9Cix0
aGlzLnJlbmRlcmVyT3B0aW9ucyxhbSk7dGhpcy5tYXJrZXJSZW5kZXJlcj0zRG5ldyB0aGlzLm1h
cmtlclJlbmRlcmVyKCk7aT0KZighdGhpcy5tYXJrZXJPcHRpb25zLmNvbG9yKXt0aGlzLm1hcmtl
ck9wdGlvbnMuY29sb3I9M0R0aGlzLmNvbG9yfWlmKHRoaXMuPQptYXJrZXJPcHRpb25zLnNob3c9
M0Q9M0RudWxsKXt0aGlzLm1hcmtlck9wdGlvbnMuc2hvdz0zRHRoaXMuc2hvd01hcmtlcn10aGk9
CnMuc2hvd01hcmtlcj0zRHRoaXMubWFya2VyT3B0aW9ucy5zaG93O3RoaXMubWFya2VyUmVuZGVy
ZXIuaW5pdCh0aGlzLm1hcmtlcj0KT3B0aW9ucyl9O1MucHJvdG90eXBlLmRyYXc9M0RmdW5jdGlv
bihhbixhayxhbSl7dmFyIGFpPTNEKGFrPTNEPTNEdSk/e306YWs7PQphbj0zRChhbj0zRD0zRHUp
P3RoaXMuY2FudmFzLl9jdHg6YW47dmFyIGFoLGFsLGFqO2ZvcihhaD0zRDA7YWg8TC5qcXBsb3Qu
cHI9CmVEcmF3U2VyaWVzSG9va3MubGVuZ3RoO2FoKyspe0wuanFwbG90LnByZURyYXdTZXJpZXNI
b29rc1thaF0uY2FsbCh0aGlzLGFuLD0KYWkpfWlmKHRoaXMuc2hvdyl7dGhpcy5yZW5kZXJlci5z
ZXRHcmlkRGF0YS5jYWxsKHRoaXMsYW0pO2lmKCFhaS5wcmV2ZW50SnFQPQpsb3RTZXJpZXNEcmF3
VHJpZ2dlcil7TChhbi5jYW52YXMpLnRyaWdnZXIoImpxcGxvdFNlcmllc0RyYXciLFt0aGlzLmRh
dGEsdGg9CmlzLmdyaWREYXRhXSl9YWw9M0RbXTtpZihhaS5kYXRhKXthbD0zRGFpLmRhdGF9ZWxz
ZXtpZighdGhpcy5fc3RhY2spe2FsPTNEdD0KaGlzLmRhdGF9ZWxzZXthbD0zRHRoaXMuX3Bsb3RE
YXRhfX1haj0zRGFpLmdyaWREYXRhfHx0aGlzLnJlbmRlcmVyLm1ha2VHcmlkPQpEYXRhLmNhbGwo
dGhpcyxhbCxhbSk7aWYodGhpcy5fdHlwZT0zRD0zRD0zRCJsaW5lIiYmdGhpcy5yZW5kZXJlci5z
bW9vdGgmJnQ9Cmhpcy5yZW5kZXJlci5fc21vb3RoZWREYXRhLmxlbmd0aCl7YWo9M0R0aGlzLnJl
bmRlcmVyLl9zbW9vdGhlZERhdGF9dGhpcy5yZT0KbmRlcmVyLmRyYXcuY2FsbCh0aGlzLGFuLGFq
LGFpLGFtKX1mb3IoYWg9M0QwO2FoPEwuanFwbG90LnBvc3REcmF3U2VyaWVzSG9vPQprcy5sZW5n
dGg7YWgrKyl7TC5qcXBsb3QucG9zdERyYXdTZXJpZXNIb29rc1thaF0uY2FsbCh0aGlzLGFuLGFp
LGFtKX1hbj0zRGE9Cms9M0RhbT0zRGFoPTNEYWw9M0Rhaj0zRG51bGx9O1MucHJvdG90eXBlLmRy
YXdTaGFkb3c9M0RmdW5jdGlvbihhbixhayxhbSl7dj0KYXIgYWk9M0QoYWs9M0Q9M0R1KT97fTph
azthbj0zRChhbj0zRD0zRHUpP3RoaXMuc2hhZG93Q2FudmFzLl9jdHg6YW47dmFyIGFoPQosYWws
YWo7Zm9yKGFoPTNEMDthaDxMLmpxcGxvdC5wcmVEcmF3U2VyaWVzU2hhZG93SG9va3MubGVuZ3Ro
O2FoKyspe0wuanFwbG89CnQucHJlRHJhd1Nlcmllc1NoYWRvd0hvb2tzW2FoXS5jYWxsKHRoaXMs
YW4sYWkpfWlmKHRoaXMuc2hhZG93KXt0aGlzLnJlbmRlcj0KZXIuc2V0R3JpZERhdGEuY2FsbCh0
aGlzLGFtKTthbD0zRFtdO2lmKGFpLmRhdGEpe2FsPTNEYWkuZGF0YX1lbHNle2lmKCF0aGlzPQou
X3N0YWNrKXthbD0zRHRoaXMuZGF0YX1lbHNle2FsPTNEdGhpcy5fcGxvdERhdGF9fWFqPTNEYWku
Z3JpZERhdGF8fHRoaXMucmU9Cm5kZXJlci5tYWtlR3JpZERhdGEuY2FsbCh0aGlzLGFsLGFtKTt0
aGlzLnJlbmRlcmVyLmRyYXdTaGFkb3cuY2FsbCh0aGlzLGFuLD0KYWosYWksYW0pfWZvcihhaD0z
RDA7YWg8TC5qcXBsb3QucG9zdERyYXdTZXJpZXNTaGFkb3dIb29rcy5sZW5ndGg7YWgrKyl7TC5q
PQpxcGxvdC5wb3N0RHJhd1Nlcmllc1NoYWRvd0hvb2tzW2FoXS5jYWxsKHRoaXMsYW4sYWkpfWFu
PTNEYWs9M0RhbT0zRGFoPTNEYWw9Cj0zRGFqPTNEbnVsbH07Uy5wcm90b3R5cGUudG9nZ2xlRGlz
cGxheT0zRGZ1bmN0aW9uKGFpLGFrKXt2YXIgYWgsYWo7aWYoYWkuZD0KYXRhLnNlcmllcyl7YWg9
M0RhaS5kYXRhLnNlcmllc31lbHNle2FoPTNEdGhpc31pZihhaS5kYXRhLnNwZWVkKXthaj0zRGFp
LmRhPQp0YS5zcGVlZH1pZihhail7aWYoYWguY2FudmFzLl9lbGVtLmlzKCI6aGlkZGVuIil8fCFh
aC5zaG93KXthaC5zaG93PTNEdHJ1ZTs9CmFoLmNhbnZhcy5fZWxlbS5yZW1vdmVDbGFzcygianFw
bG90LXNlcmllcy1oaWRkZW4iKTtpZihhaC5zaGFkb3dDYW52YXMuX2VsZT0KbSl7YWguc2hhZG93
Q2FudmFzLl9lbGVtLmZhZGVJbihhail9YWguY2FudmFzLl9lbGVtLmZhZGVJbihhaixhayk7YWgu
Y2FudmFzPQouX2VsZW0ubmV4dEFsbCgiLmpxcGxvdC1wb2ludC1sYWJlbC5qcXBsb3Qtc2VyaWVz
LSIrYWguaW5kZXgpLmZhZGVJbihhail9ZWw9CnNle2FoLnNob3c9M0RmYWxzZTthaC5jYW52YXMu
X2VsZW0uYWRkQ2xhc3MoImpxcGxvdC1zZXJpZXMtaGlkZGVuIik7aWYoYWgucz0KaGFkb3dDYW52
YXMuX2VsZW0pe2FoLnNoYWRvd0NhbnZhcy5fZWxlbS5mYWRlT3V0KGFqKX1haC5jYW52YXMuX2Vs
ZW0uZmFkZU91PQp0KGFqLGFrKTthaC5jYW52YXMuX2VsZW0ubmV4dEFsbCgiLmpxcGxvdC1wb2lu
dC1sYWJlbC5qcXBsb3Qtc2VyaWVzLSIrYWguaW49CmRleCkuZmFkZU91dChhail9fWVsc2V7aWYo
YWguY2FudmFzLl9lbGVtLmlzKCI6aGlkZGVuIil8fCFhaC5zaG93KXthaC5zaG93PQo9M0R0cnVl
O2FoLmNhbnZhcy5fZWxlbS5yZW1vdmVDbGFzcygianFwbG90LXNlcmllcy1oaWRkZW4iKTtpZihh
aC5zaGFkb3dDYW49CnZhcy5fZWxlbSl7YWguc2hhZG93Q2FudmFzLl9lbGVtLnNob3coKX1haC5j
YW52YXMuX2VsZW0uc2hvdygwLGFrKTthaC5jYW52YT0Kcy5fZWxlbS5uZXh0QWxsKCIuanFwbG90
LXBvaW50LWxhYmVsLmpxcGxvdC1zZXJpZXMtIithaC5pbmRleCkuc2hvdygpfWVsc2V7PQphaC5z
aG93PTNEZmFsc2U7YWguY2FudmFzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3Qtc2VyaWVzLWhpZGRl
biIpO2lmKGFoLnNoYWQ9Cm93Q2FudmFzLl9lbGVtKXthaC5zaGFkb3dDYW52YXMuX2VsZW0uaGlk
ZSgpfWFoLmNhbnZhcy5fZWxlbS5oaWRlKDAsYWspO2FoLj0KY2FudmFzLl9lbGVtLm5leHRBbGwo
Ii5qcXBsb3QtcG9pbnQtbGFiZWwuanFwbG90LXNlcmllcy0iK2FoLmluZGV4KS5oaWRlKCl9PQp9
fTtmdW5jdGlvbiBNKCl7TC5qcXBsb3QuRWxlbUNvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMuZHJh
d0dyaWRsaW5lcz0zRHRydWU9Cjt0aGlzLmdyaWRMaW5lQ29sb3I9M0QiI2NjY2NjYyI7dGhpcy5n
cmlkTGluZVdpZHRoPTNEMTt0aGlzLmJhY2tncm91bmQ9M0QiIz0KZmZmZGY2Ijt0aGlzLmJvcmRl
ckNvbG9yPTNEIiM5OTk5OTkiO3RoaXMuYm9yZGVyV2lkdGg9M0QyO3RoaXMuZHJhd0JvcmRlcj0K
PTNEdHJ1ZTt0aGlzLnNoYWRvdz0zRHRydWU7dGhpcy5zaGFkb3dBbmdsZT0zRDQ1O3RoaXMuc2hh
ZG93T2Zmc2V0PTNEMS41O3RoPQppcy5zaGFkb3dXaWR0aD0zRDM7dGhpcy5zaGFkb3dEZXB0aD0z
RDM7dGhpcy5zaGFkb3dDb2xvcj0zRG51bGw7dGhpcy5zaGFkb3c9CkFscGhhPTNEIjAuMDciO3Ro
aXMuX2xlZnQ7dGhpcy5fdG9wO3RoaXMuX3JpZ2h0O3RoaXMuX2JvdHRvbTt0aGlzLl93aWR0aDt0
aD0KaXMuX2hlaWdodDt0aGlzLl9heGVzPTNEW107dGhpcy5yZW5kZXJlcj0zREwuanFwbG90LkNh
bnZhc0dyaWRSZW5kZXJlcjt0aGlzPQoucmVuZGVyZXJPcHRpb25zPTNEe307dGhpcy5fb2Zmc2V0
cz0zRHt0b3A6bnVsbCxib3R0b206bnVsbCxsZWZ0Om51bGwscmlnaHQ9CjpudWxsfX1NLnByb3Rv
dHlwZT0zRG5ldyBMLmpxcGxvdC5FbGVtQ29udGFpbmVyKCk7TS5wcm90b3R5cGUuY29uc3RydWN0
b3I9Cj0zRE07TS5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKCl7aWYoTC5pc0Z1bmN0aW9uKHRo
aXMucmVuZGVyZXIpKXt0aGlzLnJlbj0KZGVyZXI9M0RuZXcgdGhpcy5yZW5kZXJlcigpfXRoaXMu
cmVuZGVyZXIuaW5pdC5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlck9wdGlvPQpucyl9O00ucHJvdG90
eXBlLmNyZWF0ZUVsZW1lbnQ9M0RmdW5jdGlvbihhaCxhaSl7dGhpcy5fb2Zmc2V0cz0zRGFoO3Jl
dHVybiA9CnRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudC5jYWxsKHRoaXMsYWkpfTtNLnByb3Rv
dHlwZS5kcmF3PTNEZnVuY3Rpb24oKXt0aD0KaXMucmVuZGVyZXIuZHJhdy5jYWxsKHRoaXMpfTtM
LmpxcGxvdC5HZW5lcmljQ2FudmFzPTNEZnVuY3Rpb24oKXtMLmpxcGxvdC5FPQpsZW1Db250YWlu
ZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O0wuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBl
PTNEbmV3IEw9Ci5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO0wuanFwbG90LkdlbmVyaWNDYW52YXMu
cHJvdG90eXBlLmNvbnN0cnVjdG9yPTNETC5qcT0KcGxvdC5HZW5lcmljQ2FudmFzO0wuanFwbG90
LkdlbmVyaWNDYW52YXMucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9M0RmdW5jdGlvPQpuKGFsLGFq
LGFpLGFtKXt0aGlzLl9vZmZzZXRzPTNEYWw7dmFyIGFoPTNEImpxcGxvdCI7aWYoYWohPTNEdSl7
YWg9M0Rhan12YXI9CiBhazthaz0zRGFtLmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7aWYoYWkh
PTNEbnVsbCl7dGhpcy5fcGxvdERpbWVuc2lvbnM9Cj0zRGFpfWFrLndpZHRoPTNEdGhpcy5fcGxv
dERpbWVuc2lvbnMud2lkdGgtdGhpcy5fb2Zmc2V0cy5sZWZ0LXRoaXMuX29mZnNldD0Kcy5yaWdo
dDthay5oZWlnaHQ9M0R0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtdGhpcy5fb2Zmc2V0cy50
b3AtdGhpcy5fb2ZmPQpzZXRzLmJvdHRvbTt0aGlzLl9lbGVtPTNETChhayk7dGhpcy5fZWxlbS5j
c3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDp0aGk9CnMuX29mZnNldHMubGVmdCx0b3A6dGhp
cy5fb2Zmc2V0cy50b3B9KTt0aGlzLl9lbGVtLmFkZENsYXNzKGFoKTthaz0zRGFtLmNhbj0KdmFz
TWFuYWdlci5pbml0Q2FudmFzKGFrKTthaz0zRG51bGw7cmV0dXJuIHRoaXMuX2VsZW19O0wuanFw
bG90LkdlbmVyaWNDYW52PQphcy5wcm90b3R5cGUuc2V0Q29udGV4dD0zRGZ1bmN0aW9uKCl7dGhp
cy5fY3R4PTNEdGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGU9Cnh0KCIyZCIpO3JldHVybiB0aGlz
Ll9jdHh9O0wuanFwbG90LkdlbmVyaWNDYW52YXMucHJvdG90eXBlLnJlc2V0Q2FudmFzPTNEZj0K
dW5jdGlvbigpe2lmKHRoaXMuX2VsZW0pe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyYmd2luZG93
Lkdfdm1sQ2FudmFzTWFuYWdlPQpyLnVuaW5pdEVsZW1lbnQhPTNEPTNEdSl7d2luZG93Lkdfdm1s
Q2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50KHRoaXMuX2VsZW09Ci5nZXQoMCkpfXRoaXMuX2Vs
ZW0uZW1wdHlGb3JjZSgpfXRoaXMuX2N0eD0zRG51bGx9O0wuanFwbG90Lkhvb2tzTWFuYWdlcj0z
RD0KZnVuY3Rpb24oKXt0aGlzLmhvb2tzPTNEW107dGhpcy5hcmdzPTNEW119O0wuanFwbG90Lkhv
b2tzTWFuYWdlci5wcm90b3R5cGUuPQphZGRPbmNlPTNEZnVuY3Rpb24oYWssYWkpe2FpPTNEYWl8
fFtdO3ZhciBhbD0zRGZhbHNlO2Zvcih2YXIgYWo9M0QwLGFoPTNEdGg9CmlzLmhvb2tzLmxlbmd0
aDthajxhaDthaisrKXtpZih0aGlzLmhvb2tzW2FqXT0zRD0zRGFrKXthbD0zRHRydWV9fWlmKCFh
bCl7dD0KaGlzLmhvb2tzLnB1c2goYWspO3RoaXMuYXJncy5wdXNoKGFpKX19O0wuanFwbG90Lkhv
b2tzTWFuYWdlci5wcm90b3R5cGUuYWRkPQo9M0RmdW5jdGlvbihhaSxhaCl7YWg9M0RhaHx8W107
dGhpcy5ob29rcy5wdXNoKGFpKTt0aGlzLmFyZ3MucHVzaChhaCl9O0wuanE9CnBsb3QuRXZlbnRM
aXN0ZW5lck1hbmFnZXI9M0RmdW5jdGlvbigpe3RoaXMuaG9va3M9M0RbXX07TC5qcXBsb3QuRXZl
bnRMaXN0ZT0KbmVyTWFuYWdlci5wcm90b3R5cGUuYWRkT25jZT0zRGZ1bmN0aW9uKGFsLGFrKXt2
YXIgYW09M0RmYWxzZSxhaixhaTtmb3IodmFyPQogYWk9M0QwLGFoPTNEdGhpcy5ob29rcy5sZW5n
dGg7YWk8YWg7YWkrKyl7YWo9M0R0aGlzLmhvb2tzW2FpXTtpZihhalswXT0zRD0KPTNEYWwmJmFq
WzFdPTNEPTNEYWspe2FtPTNEdHJ1ZX19aWYoIWFtKXt0aGlzLmhvb2tzLnB1c2goW2FsLGFrXSl9
fTtMLmpxcGxvPQp0LkV2ZW50TGlzdGVuZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGQ9M0RmdW5jdGlv
bihhaSxhaCl7dGhpcy5ob29rcy5wdXNoKFthaSw9CmFoXSl9O3ZhciBVPTNEWyJ5TWlkQXhpcyIs
InhheGlzIiwieWF4aXMiLCJ4MmF4aXMiLCJ5MmF4aXMiLCJ5M2F4aXMiLCJ5NGF4aT0KcyIsInk1
YXhpcyIsInk2YXhpcyIsInk3YXhpcyIsInk4YXhpcyIsInk5YXhpcyJdO2Z1bmN0aW9uIFIoKXt0
aGlzLmFuaW1hdGU9Cj0zRGZhbHNlO3RoaXMuYW5pbWF0ZVJlcGxvdD0zRGZhbHNlO3RoaXMuYXhl
cz0zRHt4YXhpczpuZXcgdygieGF4aXMiKSx5YXhpcz0KOm5ldyB3KCJ5YXhpcyIpLHgyYXhpczpu
ZXcgdygieDJheGlzIikseTJheGlzOm5ldyB3KCJ5MmF4aXMiKSx5M2F4aXM6bmV3IHcoPQoieTNh
eGlzIikseTRheGlzOm5ldyB3KCJ5NGF4aXMiKSx5NWF4aXM6bmV3IHcoInk1YXhpcyIpLHk2YXhp
czpuZXcgdygieTZheGk9CnMiKSx5N2F4aXM6bmV3IHcoInk3YXhpcyIpLHk4YXhpczpuZXcgdygi
eThheGlzIikseTlheGlzOm5ldyB3KCJ5OWF4aXMiKSx5TT0KaWRBeGlzOm5ldyB3KCJ5TWlkQXhp
cyIpfTt0aGlzLmJhc2VDYW52YXM9M0RuZXcgTC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoPQpp
cy5jYXB0dXJlUmlnaHRDbGljaz0zRGZhbHNlO3RoaXMuZGF0YT0zRFtdO3RoaXMuZGF0YVJlbmRl
cmVyO3RoaXMuZGF0YVJlbmQ9CmVyZXJPcHRpb25zO3RoaXMuZGVmYXVsdHM9M0R7YXhlc0RlZmF1
bHRzOnt9LGF4ZXM6e3hheGlzOnt9LHlheGlzOnt9LHgyYXhpcz0KOnt9LHkyYXhpczp7fSx5M2F4
aXM6e30seTRheGlzOnt9LHk1YXhpczp7fSx5NmF4aXM6e30seTdheGlzOnt9LHk4YXhpczp7fSx5
PQo5YXhpczp7fSx5TWlkQXhpczp7fX0sc2VyaWVzRGVmYXVsdHM6e30sc2VyaWVzOltdfTt0aGlz
LmRlZmF1bHRBeGlzU3RhcnQ9M0Q9CjE7dGhpcy5kcmF3SWZIaWRkZW49M0RmYWxzZTt0aGlzLmV2
ZW50Q2FudmFzPTNEbmV3IEwuanFwbG90LkdlbmVyaWNDYW52YXMoKT0KO3RoaXMuZmlsbEJldHdl
ZW49M0R7c2VyaWVzMTpudWxsLHNlcmllczI6bnVsbCxjb2xvcjpudWxsLGJhc2VTZXJpZXM6MCxm
aWxsPQo6dHJ1ZX07dGhpcy5mb250RmFtaWx5O3RoaXMuZm9udFNpemU7dGhpcy5ncmlkPTNEbmV3
IE0oKTt0aGlzLmxlZ2VuZD0zRG5ldyA9CnEoKTt0aGlzLm5vRGF0YUluZGljYXRvcj0zRHtzaG93
OmZhbHNlLGluZGljYXRvcjoiTG9hZGluZyBEYXRhLi4uIixheGVzOnt4YT0KeGlzOnttaW46MCxt
YXg6MTAsdGlja0ludGVydmFsOjIsc2hvdzp0cnVlfSx5YXhpczp7bWluOjAsbWF4OjEyLHRpY2tJ
bnRlcnZhPQpsOjMsc2hvdzp0cnVlfX19O3RoaXMubmVnYXRpdmVTZXJpZXNDb2xvcnM9M0RMLmpx
cGxvdC5jb25maWcuZGVmYXVsdE5lZ2F0aXY9CmVDb2xvcnM7dGhpcy5vcHRpb25zPTNEe307dGhp
cy5wcmV2aW91c1Nlcmllc1N0YWNrPTNEW107dGhpcy5wbHVnaW5zPTNEe307dD0KaGlzLnNlcmll
cz0zRFtdO3RoaXMuc2VyaWVzU3RhY2s9M0RbXTt0aGlzLnNlcmllc0NvbG9ycz0zREwuanFwbG90
LmNvbmZpZy5kPQplZmF1bHRDb2xvcnM7dGhpcy5zb3J0RGF0YT0zRHRydWU7dGhpcy5zdGFja1Nl
cmllcz0zRGZhbHNlO3RoaXMuc3luY1hUaWNrcz0KPTNEdHJ1ZTt0aGlzLnN5bmNZVGlja3M9M0R0
cnVlO3RoaXMudGFyZ2V0PTNEbnVsbDt0aGlzLnRhcmdldElkPTNEbnVsbDt0aGlzPQoudGV4dENv
bG9yO3RoaXMudGl0bGU9M0RuZXcgeSgpO3RoaXMuX2RyYXdDb3VudD0zRDA7dGhpcy5fc3VteT0z
RDA7dGhpcy5fc3U9Cm14PTNEMDt0aGlzLl9zdGFja0RhdGE9M0RbXTt0aGlzLl9wbG90RGF0YT0z
RFtdO3RoaXMuX3dpZHRoPTNEbnVsbDt0aGlzLl9oZT0KaWdodD0zRG51bGw7dGhpcy5fcGxvdERp
bWVuc2lvbnM9M0R7aGVpZ2h0Om51bGwsd2lkdGg6bnVsbH07dGhpcy5fZ3JpZFBhZGRpPQpuZz0z
RHt0b3A6bnVsbCxyaWdodDpudWxsLGJvdHRvbTpudWxsLGxlZnQ6bnVsbH07dGhpcy5fZGVmYXVs
dEdyaWRQYWRkaW5nPQo9M0R7dG9wOjEwLHJpZ2h0OjEwLGJvdHRvbToyMyxsZWZ0OjEwfTt0aGlz
Ll9hZGREb21SZWZlcmVuY2U9M0RMLmpxcGxvdC5jb249CmZpZy5hZGREb21SZWZlcmVuY2U7dGhp
cy5wcmVJbml0SG9va3M9M0RuZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wbz0Kc3RJ
bml0SG9va3M9M0RuZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVQYXJzZU9wdGlv
bnNIb29rcz0zRG5ldyBMPQouanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucG9zdFBhcnNlT3B0
aW9uc0hvb2tzPTNEbmV3IEwuanFwbG90Lkhvb2tzTWFuYWc9CmVyKCk7dGhpcy5wcmVEcmF3SG9v
a3M9M0RuZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wb3N0RHJhd0hvb2tzPTNEbj0K
ZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVEcmF3U2VyaWVzSG9va3M9M0RuZXcg
TC5qcXBsb3QuSG9va3NNYW5hPQpnZXIoKTt0aGlzLnBvc3REcmF3U2VyaWVzSG9va3M9M0RuZXcg
TC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVEcmF3TGU9CmdlbmRIb29rcz0zRG5ldyBM
LmpxcGxvdC5Ib29rc01hbmFnZXIoKTt0aGlzLmFkZExlZ2VuZFJvd0hvb2tzPTNEbmV3IEwuanFw
bD0Kb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVTZXJpZXNJbml0SG9va3M9M0RuZXcgTC5qcXBs
b3QuSG9va3NNYW5hZ2VyKCk7dGhpPQpzLnBvc3RTZXJpZXNJbml0SG9va3M9M0RuZXcgTC5qcXBs
b3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5wcmVQYXJzZVNlcmllc09wdGk9Cm9uc0hvb2tzPTNEbmV3
IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMucG9zdFBhcnNlU2VyaWVzT3B0aW9uc0hvb2tz
PTNEbj0KZXcgTC5qcXBsb3QuSG9va3NNYW5hZ2VyKCk7dGhpcy5ldmVudExpc3RlbmVySG9va3M9
M0RuZXcgTC5qcXBsb3QuRXZlbnRMaXN0PQplbmVyTWFuYWdlcigpO3RoaXMucHJlRHJhd1Nlcmll
c1NoYWRvd0hvb2tzPTNEbmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3Q9Cmhpcy5wb3N0RHJh
d1Nlcmllc1NoYWRvd0hvb2tzPTNEbmV3IEwuanFwbG90Lkhvb2tzTWFuYWdlcigpO3RoaXMuY29s
b3JHZW5lcj0KYXRvcj0zRG5ldyBMLmpxcGxvdC5Db2xvckdlbmVyYXRvcigpO3RoaXMubmVnYXRp
dmVDb2xvckdlbmVyYXRvcj0zRG5ldyBMLmpxPQpwbG90LkNvbG9yR2VuZXJhdG9yKCk7dGhpcy5j
YW52YXNNYW5hZ2VyPTNEbmV3IEwuanFwbG90LkNhbnZhc01hbmFnZXIoKTt0aGk9CnMudGhlbWVF
bmdpbmU9M0RuZXcgTC5qcXBsb3QuVGhlbWVFbmdpbmUoKTt2YXIgYWo9M0QwO3RoaXMuaW5pdD0z
RGZ1bmN0aW9uKD0KYXYsYXIsYXkpe2F5PTNEYXl8fHt9O2Zvcih2YXIgYXQ9M0QwO2F0PEwuanFw
bG90LnByZUluaXRIb29rcy5sZW5ndGg7YXQrKyl7PQpMLmpxcGxvdC5wcmVJbml0SG9va3NbYXRd
LmNhbGwodGhpcyxhdixhcixheSl9Zm9yKHZhciBhdD0zRDA7YXQ8dGhpcy5wcmVJbmk9CnRIb29r
cy5ob29rcy5sZW5ndGg7YXQrKyl7dGhpcy5wcmVJbml0SG9va3MuaG9va3NbYXRdLmNhbGwodGhp
cyxhdixhcixheSl9dD0KaGlzLnRhcmdldElkPTNEIiMiK2F2O3RoaXMudGFyZ2V0PTNETCgiIyIr
YXYpO2lmKHRoaXMuX2FkZERvbVJlZmVyZW5jZSl7dGhpPQpzLnRhcmdldC5kYXRhKCJqcXBsb3Qi
LHRoaXMpfXRoaXMudGFyZ2V0LnJlbW92ZUNsYXNzKCJqcXBsb3QtZXJyb3IiKTtpZighdGg9Cmlz
LnRhcmdldC5nZXQoMCkpe3Rocm93IG5ldyBFcnJvcigiTm8gcGxvdCB0YXJnZXQgc3BlY2lmaWVk
Iil9aWYodGhpcy50YXJnZT0KdC5jc3MoInBvc2l0aW9uIik9M0Q9M0Qic3RhdGljIil7dGhpcy50
YXJnZXQuY3NzKCJwb3NpdGlvbiIsInJlbGF0aXZlIil9aWYoPQohdGhpcy50YXJnZXQuaGFzQ2xh
c3MoImpxcGxvdC10YXJnZXQiKSl7dGhpcy50YXJnZXQuYWRkQ2xhc3MoImpxcGxvdC10YXJnZXQ9
CiIpfWlmKCF0aGlzLnRhcmdldC5oZWlnaHQoKSl7dmFyIGF1O2lmKGF5JiZheS5oZWlnaHQpe2F1
PTNEcGFyc2VJbnQoYXkuaGVpZz0KaHQsMTApfWVsc2V7aWYodGhpcy50YXJnZXQuYXR0cigiZGF0
YS1oZWlnaHQiKSl7YXU9M0RwYXJzZUludCh0aGlzLnRhcmdldC5hPQp0dHIoImRhdGEtaGVpZ2h0
IiksMTApfWVsc2V7YXU9M0RwYXJzZUludChMLmpxcGxvdC5jb25maWcuZGVmYXVsdEhlaWdodCwx
MCk9Cn19dGhpcy5faGVpZ2h0PTNEYXU7dGhpcy50YXJnZXQuY3NzKCJoZWlnaHQiLGF1KyJweCIp
fWVsc2V7dGhpcy5faGVpZ2h0PTNEYT0KdT0zRHRoaXMudGFyZ2V0LmhlaWdodCgpfWlmKCF0aGlz
LnRhcmdldC53aWR0aCgpKXt2YXIgYXc7aWYoYXkmJmF5LndpZHRoKXthPQp3PTNEcGFyc2VJbnQo
YXkud2lkdGgsMTApfWVsc2V7aWYodGhpcy50YXJnZXQuYXR0cigiZGF0YS13aWR0aCIpKXthdz0z
RHBhcnM9CmVJbnQodGhpcy50YXJnZXQuYXR0cigiZGF0YS13aWR0aCIpLDEwKX1lbHNle2F3PTNE
cGFyc2VJbnQoTC5qcXBsb3QuY29uZmlnLj0KZGVmYXVsdFdpZHRoLDEwKX19dGhpcy5fd2lkdGg9
M0Rhdzt0aGlzLnRhcmdldC5jc3MoIndpZHRoIixhdysicHgiKX1lbHNle3RoPQppcy5fd2lkdGg9
M0Rhdz0zRHRoaXMudGFyZ2V0LndpZHRoKCl9Zm9yKHZhciBhdD0zRDAsYXA9M0RVLmxlbmd0aDth
dDxhcDthdCs9Cispe3RoaXMuYXhlc1tVW2F0XV09M0RuZXcgdyhVW2F0XSl9dGhpcy5fcGxvdERp
bWVuc2lvbnMuaGVpZ2h0PTNEdGhpcy5faGVpZz0KaHQ7dGhpcy5fcGxvdERpbWVuc2lvbnMud2lk
dGg9M0R0aGlzLl93aWR0aDt0aGlzLmdyaWQuX3Bsb3REaW1lbnNpb25zPTNEdGhpPQpzLl9wbG90
RGltZW5zaW9uczt0aGlzLnRpdGxlLl9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNp
b25zO3RoaXMuYmE9CnNlQ2FudmFzLl9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNp
b25zO3RoaXMuZXZlbnRDYW52YXMuX3Bsb3REaW1lbj0Kc2lvbnM9M0R0aGlzLl9wbG90RGltZW5z
aW9uczt0aGlzLmxlZ2VuZC5fcGxvdERpbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5zPQppb25z
O2lmKHRoaXMuX2hlaWdodDw9M0QwfHx0aGlzLl93aWR0aDw9M0QwfHwhdGhpcy5faGVpZ2h0fHwh
dGhpcy5fd2lkdGgpe3Q9Cmhyb3cgbmV3IEVycm9yKCJDYW52YXMgZGltZW5zaW9uIG5vdCBzZXQi
KX1pZihheS5kYXRhUmVuZGVyZXImJkwuaXNGdW5jdGlvbj0KKGF5LmRhdGFSZW5kZXJlcikpe2lm
KGF5LmRhdGFSZW5kZXJlck9wdGlvbnMpe3RoaXMuZGF0YVJlbmRlcmVyT3B0aW9ucz0zRGF5PQou
ZGF0YVJlbmRlcmVyT3B0aW9uc310aGlzLmRhdGFSZW5kZXJlcj0zRGF5LmRhdGFSZW5kZXJlcjth
cj0zRHRoaXMuZGF0YVJlbmQ9CmVyZXIoYXIsdGhpcyx0aGlzLmRhdGFSZW5kZXJlck9wdGlvbnMp
fWlmKGF5Lm5vRGF0YUluZGljYXRvciYmTC5pc1BsYWluT2JqZT0KY3QoYXkubm9EYXRhSW5kaWNh
dG9yKSl7TC5leHRlbmQodHJ1ZSx0aGlzLm5vRGF0YUluZGljYXRvcixheS5ub0RhdGFJbmRpY2F0
PQpvcil9aWYoYXI9M0Q9M0RudWxsfHxMLmlzQXJyYXkoYXIpPTNEPTNEZmFsc2V8fGFyLmxlbmd0
aD0zRD0zRDB8fEwuaXNBcnJheSg9CmFyWzBdKT0zRD0zRGZhbHNlfHxhclswXS5sZW5ndGg9M0Q9
M0QwKXtpZih0aGlzLm5vRGF0YUluZGljYXRvci5zaG93PTNEPTNEZj0KYWxzZSl7dGhyb3cgbmV3
IEVycm9yKCJObyBkYXRhIHNwZWNpZmllZCIpfWVsc2V7Zm9yKHZhciBhbCBpbiB0aGlzLm5vRGF0
YUluPQpkaWNhdG9yLmF4ZXMpe2Zvcih2YXIgYW4gaW4gdGhpcy5ub0RhdGFJbmRpY2F0b3IuYXhl
c1thbF0pe3RoaXMuYXhlc1thbF1bYW49Cl09M0R0aGlzLm5vRGF0YUluZGljYXRvci5heGVzW2Fs
XVthbl19fXRoaXMucG9zdERyYXdIb29rcy5hZGQoZnVuY3Rpb24oKXt2YT0KciBhRD0zRHRoaXMu
ZXZlbnRDYW52YXMuZ2V0SGVpZ2h0KCk7dmFyIGFBPTNEdGhpcy5ldmVudENhbnZhcy5nZXRXaWR0
aCgpO3ZhPQpyIGF6PTNETCgnPGRpdiBjbGFzcz0zRCJqcXBsb3Qtbm9EYXRhLWNvbnRhaW5lciIg
c3R5bGU9M0QicG9zaXRpb246YWJzb2x1dGU9CjsiPjwvZGl2PicpO3RoaXMudGFyZ2V0LmFwcGVu
ZChheik7YXouaGVpZ2h0KGFEKTthei53aWR0aChhQSk7YXouY3NzKCJ0b3AiLD0KdGhpcy5ldmVu
dENhbnZhcy5fb2Zmc2V0cy50b3ApO2F6LmNzcygibGVmdCIsdGhpcy5ldmVudENhbnZhcy5fb2Zm
c2V0cy5sZWZ0PQopO3ZhciBhQz0zREwoJzxkaXYgY2xhc3M9M0QianFwbG90LW5vRGF0YS1jb250
ZW50cyIgc3R5bGU9M0QidGV4dC1hbGlnbjpjZW49CnRlcjsgcG9zaXRpb246cmVsYXRpdmU7IG1h
cmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyI+PC9kaXY+Jyk7YXouYT0KcHBlbmQo
YUMpO2FDLmh0bWwodGhpcy5ub0RhdGFJbmRpY2F0b3IuaW5kaWNhdG9yKTt2YXIgYUI9M0RhQy5o
ZWlnaHQoKTt2YXIgPQpheD0zRGFDLndpZHRoKCk7YUMuaGVpZ2h0KGFCKTthQy53aWR0aChheCk7
YUMuY3NzKCJ0b3AiLChhRC1hQikvMisicHgiKX0pfX09CnRoaXMuZGF0YT0zREwuZXh0ZW5kKHRy
dWUsW10sYXIpO3RoaXMucGFyc2VPcHRpb25zKGF5KTtpZih0aGlzLnRleHRDb2xvcil7dD0KaGlz
LnRhcmdldC5jc3MoImNvbG9yIix0aGlzLnRleHRDb2xvcil9aWYodGhpcy5mb250RmFtaWx5KXt0
aGlzLnRhcmdldC5jc3MoPQoiZm9udC1mYW1pbHkiLHRoaXMuZm9udEZhbWlseSl9aWYodGhpcy5m
b250U2l6ZSl7dGhpcy50YXJnZXQuY3NzKCJmb250LXNpemU9CiIsdGhpcy5mb250U2l6ZSl9dGhp
cy50aXRsZS5pbml0KCk7dGhpcy5sZWdlbmQuaW5pdCgpO3RoaXMuX3N1bXk9M0QwO3RoaXMuXz0K
c3VteD0zRDA7dGhpcy5jb21wdXRlUGxvdERhdGEoKTtmb3IodmFyIGF0PTNEMDthdDx0aGlzLnNl
cmllcy5sZW5ndGg7YXQrKyl7PQp0aGlzLnNlcmllc1N0YWNrLnB1c2goYXQpO3RoaXMucHJldmlv
dXNTZXJpZXNTdGFjay5wdXNoKGF0KTt0aGlzLnNlcmllc1thdF09Ci5zaGFkb3dDYW52YXMuX3Bs
b3REaW1lbnNpb25zPTNEdGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5zZXJpZXNbYXRdLmNhbnZh
cz0KLl9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO2Zvcih2YXIgYXE9M0Qw
O2FxPEwuanFwbG90LnByZVNlcmllPQpzSW5pdEhvb2tzLmxlbmd0aDthcSsrKXtMLmpxcGxvdC5w
cmVTZXJpZXNJbml0SG9va3NbYXFdLmNhbGwodGhpcy5zZXJpZXNbYXQ9Cl0sYXYsdGhpcy5kYXRh
LHRoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSx0aGlz
KX1mbz0Kcih2YXIgYXE9M0QwO2FxPHRoaXMucHJlU2VyaWVzSW5pdEhvb2tzLmhvb2tzLmxlbmd0
aDthcSsrKXt0aGlzLnByZVNlcmllc0luPQppdEhvb2tzLmhvb2tzW2FxXS5jYWxsKHRoaXMuc2Vy
aWVzW2F0XSxhdix0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmE9CnVsdHMsdGhpcy5v
cHRpb25zLnNlcmllc1thdF0sdGhpcyl9dGhpcy5zZXJpZXNbYXRdLl9wbG90RGltZW5zaW9ucz0z
RHRoaXMuXz0KcGxvdERpbWVuc2lvbnM7dGhpcy5zZXJpZXNbYXRdLmluaXQoYXQsdGhpcy5ncmlk
LmJvcmRlcldpZHRoLHRoaXMpO2Zvcih2YXIgPQphcT0zRDA7YXE8TC5qcXBsb3QucG9zdFNlcmll
c0luaXRIb29rcy5sZW5ndGg7YXErKyl7TC5qcXBsb3QucG9zdFNlcmllc0luaXQ9Ckhvb2tzW2Fx
XS5jYWxsKHRoaXMuc2VyaWVzW2F0XSxhdix0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmllc0Rl
ZmF1bHRzLHRoaT0Kcy5vcHRpb25zLnNlcmllc1thdF0sdGhpcyl9Zm9yKHZhciBhcT0zRDA7YXE8
dGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzLmhvb2tzPQoubGVuZ3RoO2FxKyspe3RoaXMucG9zdFNl
cmllc0luaXRIb29rcy5ob29rc1thcV0uY2FsbCh0aGlzLnNlcmllc1thdF0sYXYsdGg9CmlzLmRh
dGEsdGhpcy5vcHRpb25zLnNlcmllc0RlZmF1bHRzLHRoaXMub3B0aW9ucy5zZXJpZXNbYXRdLHRo
aXMpfXRoaXMuX3N1bT0KeSs9M0R0aGlzLnNlcmllc1thdF0uX3N1bXk7dGhpcy5fc3VteCs9M0R0
aGlzLnNlcmllc1thdF0uX3N1bXh9dmFyIGFtLGFvO2ZvPQpyKHZhciBhdD0zRDAsYXA9M0RVLmxl
bmd0aDthdDxhcDthdCsrKXthbT0zRFVbYXRdO2FvPTNEdGhpcy5heGVzW2FtXTthby5fcGw9Cm90
RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO2FvLmluaXQoKTtpZih0aGlzLmF4ZXNb
YW1dLmJvcmRlckNvbG9yPQo9M0Q9M0RudWxsKXtpZihhbS5jaGFyQXQoMCkhPTNEPTNEIngiJiZh
by51c2VTZXJpZXNDb2xvcj0zRD0zRD0zRHRydWUmJmFvLnM9Cmhvdyl7YW8uYm9yZGVyQ29sb3I9
M0Rhby5fc2VyaWVzWzBdLmNvbG9yfWVsc2V7YW8uYm9yZGVyQ29sb3I9M0R0aGlzLmdyaWQuYj0K
b3JkZXJDb2xvcn19fWlmKHRoaXMuc29ydERhdGEpe2FoKHRoaXMuc2VyaWVzKX10aGlzLmdyaWQu
aW5pdCgpO3RoaXMuZ3JpZC5fPQpheGVzPTNEdGhpcy5heGVzO3RoaXMubGVnZW5kLl9zZXJpZXM9
M0R0aGlzLnNlcmllcztmb3IodmFyIGF0PTNEMDthdDxMLmpxcGw9Cm90LnBvc3RJbml0SG9va3Mu
bGVuZ3RoO2F0Kyspe0wuanFwbG90LnBvc3RJbml0SG9va3NbYXRdLmNhbGwodGhpcyxhdix0aGlz
Lj0KZGF0YSxheSl9Zm9yKHZhciBhdD0zRDA7YXQ8dGhpcy5wb3N0SW5pdEhvb2tzLmhvb2tzLmxl
bmd0aDthdCsrKXt0aGlzLnBvc3RJPQpuaXRIb29rcy5ob29rc1thdF0uY2FsbCh0aGlzLGF2LHRo
aXMuZGF0YSxheSl9fTt0aGlzLnJlc2V0QXhlc1NjYWxlPTNEZnVuY3Q9CmlvbihhcSxhbSl7dmFy
IGFvPTNEYW18fHt9O3ZhciBhcD0zRGFxfHx0aGlzLmF4ZXM7aWYoYXA9M0Q9M0Q9M0R0cnVlKXth
cD0zRD0KdGhpcy5heGVzfWlmKEwuaXNBcnJheShhcCkpe2Zvcih2YXIgYW49M0QwO2FuPGFwLmxl
bmd0aDthbisrKXt0aGlzLmF4ZXNbYXBbPQphbl1dLnJlc2V0U2NhbGUoYW9bYXBbYW5dXSl9fWVs
c2V7aWYodHlwZW9mKGFwKT0zRD0zRD0zRCJvYmplY3QiKXtmb3IodmFyIGE9CmwgaW4gYXApe3Ro
aXMuYXhlc1thbF0ucmVzZXRTY2FsZShhb1thbF0pfX19fTt0aGlzLnJlSW5pdGlhbGl6ZT0zRGZ1
bmN0aW9uKD0KYXUsYWwpe3ZhciBheT0zREwuZXh0ZW5kKHRydWUse30sdGhpcy5vcHRpb25zLGFs
KTt2YXIgYXc9M0R0aGlzLnRhcmdldElkLnN1PQpic3RyKDEpO3ZhciBhcj0zRChhdT0zRD0zRG51
bGwpP3RoaXMuZGF0YTphdTtmb3IodmFyIGF2PTNEMDthdjxMLmpxcGxvdC5wcmU9CkluaXRIb29r
cy5sZW5ndGg7YXYrKyl7TC5qcXBsb3QucHJlSW5pdEhvb2tzW2F2XS5jYWxsKHRoaXMsYXcsYXIs
YXkpfWZvcih2YT0KciBhdj0zRDA7YXY8dGhpcy5wcmVJbml0SG9va3MuaG9va3MubGVuZ3RoO2F2
Kyspe3RoaXMucHJlSW5pdEhvb2tzLmhvb2tzW2F2PQpdLmNhbGwodGhpcyxhdyxhcixheSl9dGhp
cy5faGVpZ2h0PTNEdGhpcy50YXJnZXQuaGVpZ2h0KCk7dGhpcy5fd2lkdGg9M0R0aGk9CnMudGFy
Z2V0LndpZHRoKCk7aWYodGhpcy5faGVpZ2h0PD0zRDB8fHRoaXMuX3dpZHRoPD0zRDB8fCF0aGlz
Ll9oZWlnaHR8fCF0aD0KaXMuX3dpZHRoKXt0aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBkaW1lbnNp
b24gbm90IHNldCIpfXRoaXMuX3Bsb3REaW1lbnNpb25zPQouaGVpZ2h0PTNEdGhpcy5faGVpZ2h0
O3RoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoPTNEdGhpcy5fd2lkdGg7dGhpcy5ncmlkLl89CnBs
b3REaW1lbnNpb25zPTNEdGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy50aXRsZS5fcGxvdERpbWVu
c2lvbnM9M0R0aGlzLl9wbD0Kb3REaW1lbnNpb25zO3RoaXMuYmFzZUNhbnZhcy5fcGxvdERpbWVu
c2lvbnM9M0R0aGlzLl9wbG90RGltZW5zaW9uczt0aGlzLmV2PQplbnRDYW52YXMuX3Bsb3REaW1l
bnNpb25zPTNEdGhpcy5fcGxvdERpbWVuc2lvbnM7dGhpcy5sZWdlbmQuX3Bsb3REaW1lbnNpb249
CnM9M0R0aGlzLl9wbG90RGltZW5zaW9uczt2YXIgYW0sYXgsYXQsYW87Zm9yKHZhciBhdj0zRDAs
YXE9M0RVLmxlbmd0aDthdjxhcT0KO2F2Kyspe2FtPTNEVVthdl07YW89M0R0aGlzLmF4ZXNbYW1d
O2F4PTNEYW8uX3RpY2tzO2Zvcih2YXIgYXQ9M0QwLGFwPTNEYXguPQpsZW5ndGg7YXQ8YXA7YXQr
Kyl7dmFyIGFuPTNEYXhbYXRdLl9lbGVtO2lmKGFuKXtpZihMLmpxcGxvdC51c2VfZXhjYW52YXMm
Jnc9CmluZG93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50IT0zRD0zRHUpe3dpbmRv
dy5HX3ZtbENhbnZhc01hbmFnZXIudT0KbmluaXRFbGVtZW50KGFuLmdldCgwKSl9YW4uZW1wdHlG
b3JjZSgpO2FuPTNEbnVsbDtheC5fZWxlbT0zRG51bGx9fWF4PTNEbnVsPQpsO2RlbGV0ZSBhby50
aWNrcztkZWxldGUgYW8uX3RpY2tzO3RoaXMuYXhlc1thbV09M0RuZXcgdyhhbSk7dGhpcy5heGVz
W2FtXS49Cl9wbG90V2lkdGg9M0R0aGlzLl93aWR0aDt0aGlzLmF4ZXNbYW1dLl9wbG90SGVpZ2h0
PTNEdGhpcy5faGVpZ2h0fWlmKGF1KXtpZj0KKGF5LmRhdGFSZW5kZXJlciYmTC5pc0Z1bmN0aW9u
KGF5LmRhdGFSZW5kZXJlcikpe2lmKGF5LmRhdGFSZW5kZXJlck9wdGlvbnMpPQp7dGhpcy5kYXRh
UmVuZGVyZXJPcHRpb25zPTNEYXkuZGF0YVJlbmRlcmVyT3B0aW9uc310aGlzLmRhdGFSZW5kZXJl
cj0zRGF5LmQ9CmF0YVJlbmRlcmVyO2F1PTNEdGhpcy5kYXRhUmVuZGVyZXIoYXUsdGhpcyx0aGlz
LmRhdGFSZW5kZXJlck9wdGlvbnMpfXRoaXMuZD0KYXRhPTNETC5leHRlbmQodHJ1ZSxbXSxhdSl9
aWYoYWwpe3RoaXMucGFyc2VPcHRpb25zKGF5KX10aGlzLnRpdGxlLl9wbG90V2lkPQp0aD0zRHRo
aXMuX3dpZHRoO2lmKHRoaXMudGV4dENvbG9yKXt0aGlzLnRhcmdldC5jc3MoImNvbG9yIix0aGlz
LnRleHRDb2xvcik9Cn1pZih0aGlzLmZvbnRGYW1pbHkpe3RoaXMudGFyZ2V0LmNzcygiZm9udC1m
YW1pbHkiLHRoaXMuZm9udEZhbWlseSl9aWYodGhpcz0KLmZvbnRTaXplKXt0aGlzLnRhcmdldC5j
c3MoImZvbnQtc2l6ZSIsdGhpcy5mb250U2l6ZSl9dGhpcy50aXRsZS5pbml0KCk7dGhpPQpzLmxl
Z2VuZC5pbml0KCk7dGhpcy5fc3VteT0zRDA7dGhpcy5fc3VteD0zRDA7dGhpcy5zZXJpZXNTdGFj
az0zRFtdO3RoaXMucHI9CmV2aW91c1Nlcmllc1N0YWNrPTNEW107dGhpcy5jb21wdXRlUGxvdERh
dGEoKTtmb3IodmFyIGF2PTNEMCxhcT0zRHRoaXMuc2VyaT0KZXMubGVuZ3RoO2F2PGFxO2F2Kysp
e3RoaXMuc2VyaWVzU3RhY2sucHVzaChhdik7dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrLnB1PQpz
aChhdik7dGhpcy5zZXJpZXNbYXZdLnNoYWRvd0NhbnZhcy5fcGxvdERpbWVuc2lvbnM9M0R0aGlz
Ll9wbG90RGltZW5zaW9uczs9CnRoaXMuc2VyaWVzW2F2XS5jYW52YXMuX3Bsb3REaW1lbnNpb25z
PTNEdGhpcy5fcGxvdERpbWVuc2lvbnM7Zm9yKHZhciBhdD0zRD0KMDthdDxMLmpxcGxvdC5wcmVT
ZXJpZXNJbml0SG9va3MubGVuZ3RoO2F0Kyspe0wuanFwbG90LnByZVNlcmllc0luaXRIb29rc1th
PQp0XS5jYWxsKHRoaXMuc2VyaWVzW2F2XSxhdyx0aGlzLmRhdGEsdGhpcy5vcHRpb25zLnNlcmll
c0RlZmF1bHRzLHRoaXMub3B0aW89Cm5zLnNlcmllc1thdl0sdGhpcyl9Zm9yKHZhciBhdD0zRDA7
YXQ8dGhpcy5wcmVTZXJpZXNJbml0SG9va3MuaG9va3MubGVuZ3RoOz0KYXQrKyl7dGhpcy5wcmVT
ZXJpZXNJbml0SG9va3MuaG9va3NbYXRdLmNhbGwodGhpcy5zZXJpZXNbYXZdLGF3LHRoaXMuZGF0
YSx0PQpoaXMub3B0aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F2XSx0
aGlzKX10aGlzLnNlcmllc1thdl0uX3A9CmxvdERpbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5z
aW9uczt0aGlzLnNlcmllc1thdl0uaW5pdChhdix0aGlzLmdyaWQuYm9yZD0KZXJXaWR0aCx0aGlz
KTtmb3IodmFyIGF0PTNEMDthdDxMLmpxcGxvdC5wb3N0U2VyaWVzSW5pdEhvb2tzLmxlbmd0aDth
dCsrKXtMPQouanFwbG90LnBvc3RTZXJpZXNJbml0SG9va3NbYXRdLmNhbGwodGhpcy5zZXJpZXNb
YXZdLGF3LHRoaXMuZGF0YSx0aGlzLm9wdGk9Cm9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlv
bnMuc2VyaWVzW2F2XSx0aGlzKX1mb3IodmFyIGF0PTNEMDthdDx0aGlzLnBvcz0KdFNlcmllc0lu
aXRIb29rcy5ob29rcy5sZW5ndGg7YXQrKyl7dGhpcy5wb3N0U2VyaWVzSW5pdEhvb2tzLmhvb2tz
W2F0XS5jYWxsPQoodGhpcy5zZXJpZXNbYXZdLGF3LHRoaXMuZGF0YSx0aGlzLm9wdGlvbnMuc2Vy
aWVzRGVmYXVsdHMsdGhpcy5vcHRpb25zLnNlcmk9CmVzW2F2XSx0aGlzKX10aGlzLl9zdW15Kz0z
RHRoaXMuc2VyaWVzW2F2XS5fc3VteTt0aGlzLl9zdW14Kz0zRHRoaXMuc2VyaWVzWz0KYXZdLl9z
dW14fWZvcih2YXIgYXY9M0QwLGFxPTNEVS5sZW5ndGg7YXY8YXE7YXYrKyl7YW09M0RVW2F2XTth
bz0zRHRoaXMuYXhlPQpzW2FtXTthby5fcGxvdERpbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5z
aW9uczthby5pbml0KCk7aWYoYW8uYm9yZGVyQ29sb3I9Cj0zRD0zRG51bGwpe2lmKGFtLmNoYXJB
dCgwKSE9M0Q9M0QieCImJmFvLnVzZVNlcmllc0NvbG9yPTNEPTNEPTNEdHJ1ZSYmYW8ucz0KaG93
KXthby5ib3JkZXJDb2xvcj0zRGFvLl9zZXJpZXNbMF0uY29sb3J9ZWxzZXthby5ib3JkZXJDb2xv
cj0zRHRoaXMuZ3JpZC5iPQpvcmRlckNvbG9yfX19aWYodGhpcy5zb3J0RGF0YSl7YWgodGhpcy5z
ZXJpZXMpfXRoaXMuZ3JpZC5pbml0KCk7dGhpcy5ncmlkLl89CmF4ZXM9M0R0aGlzLmF4ZXM7dGhp
cy5sZWdlbmQuX3Nlcmllcz0zRHRoaXMuc2VyaWVzO2Zvcih2YXIgYXY9M0QwLGFxPTNETC5qcT0K
cGxvdC5wb3N0SW5pdEhvb2tzLmxlbmd0aDthdjxhcTthdisrKXtMLmpxcGxvdC5wb3N0SW5pdEhv
b2tzW2F2XS5jYWxsKHRoaXMsPQphdyx0aGlzLmRhdGEsYXkpfWZvcih2YXIgYXY9M0QwLGFxPTNE
dGhpcy5wb3N0SW5pdEhvb2tzLmhvb2tzLmxlbmd0aDthdjxhcTs9CmF2Kyspe3RoaXMucG9zdElu
aXRIb29rcy5ob29rc1thdl0uY2FsbCh0aGlzLGF3LHRoaXMuZGF0YSxheSl9fTt0aGlzLnF1aWNr
ST0Kbml0PTNEZnVuY3Rpb24oKXt0aGlzLl9oZWlnaHQ9M0R0aGlzLnRhcmdldC5oZWlnaHQoKTt0
aGlzLl93aWR0aD0zRHRoaXMudGFyPQpnZXQud2lkdGgoKTtpZih0aGlzLl9oZWlnaHQ8PTNEMHx8
dGhpcy5fd2lkdGg8PTNEMHx8IXRoaXMuX2hlaWdodHx8IXRoaXMuX3c9CmlkdGgpe3Rocm93IG5l
dyBFcnJvcigiVGFyZ2V0IGRpbWVuc2lvbiBub3Qgc2V0Iil9dGhpcy5fcGxvdERpbWVuc2lvbnMu
aGVpZz0KaHQ9M0R0aGlzLl9oZWlnaHQ7dGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg9M0R0aGlz
Ll93aWR0aDt0aGlzLmdyaWQuX3Bsb3REPQppbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5zaW9u
czt0aGlzLnRpdGxlLl9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW09CmVuc2lvbnM7dGhp
cy5iYXNlQ2FudmFzLl9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMu
ZXZlbnRDYT0KbnZhcy5fcGxvdERpbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5zaW9uczt0aGlz
LmxlZ2VuZC5fcGxvdERpbWVuc2lvbnM9M0R0PQpoaXMuX3Bsb3REaW1lbnNpb25zO2Zvcih2YXIg
YXEgaW4gdGhpcy5heGVzKXt0aGlzLmF4ZXNbYXFdLl9wbG90V2lkdGg9M0R0aGk9CnMuX3dpZHRo
O3RoaXMuYXhlc1thcV0uX3Bsb3RIZWlnaHQ9M0R0aGlzLl9oZWlnaHR9dGhpcy50aXRsZS5fcGxv
dFdpZHRoPTNEdD0KaGlzLl93aWR0aDtpZih0aGlzLnRleHRDb2xvcil7dGhpcy50YXJnZXQuY3Nz
KCJjb2xvciIsdGhpcy50ZXh0Q29sb3IpfWlmKHRoPQppcy5mb250RmFtaWx5KXt0aGlzLnRhcmdl
dC5jc3MoImZvbnQtZmFtaWx5Iix0aGlzLmZvbnRGYW1pbHkpfWlmKHRoaXMuZm9udFM9Cml6ZSl7
dGhpcy50YXJnZXQuY3NzKCJmb250LXNpemUiLHRoaXMuZm9udFNpemUpfXRoaXMuX3N1bXk9M0Qw
O3RoaXMuX3N1bXg9Cj0zRDA7dGhpcy5jb21wdXRlUGxvdERhdGEoKTtmb3IodmFyIGFvPTNEMDth
bzx0aGlzLnNlcmllcy5sZW5ndGg7YW8rKyl7aWYodD0KaGlzLnNlcmllc1thb10uX3R5cGU9M0Q9
M0Q9M0QibGluZSImJnRoaXMuc2VyaWVzW2FvXS5yZW5kZXJlci5iYW5kcy5zaG93KXt0PQpoaXMu
c2VyaWVzW2FvXS5yZW5kZXJlci5pbml0QmFuZHMuY2FsbCh0aGlzLnNlcmllc1thb10sdGhpcy5z
ZXJpZXNbYW9dLnJlbmQ9CmVyZXIub3B0aW9ucyx0aGlzKX10aGlzLnNlcmllc1thb10uX3Bsb3RE
aW1lbnNpb25zPTNEdGhpcy5fcGxvdERpbWVuc2lvbnM7dD0KaGlzLnNlcmllc1thb10uY2FudmFz
Ll9wbG90RGltZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuX3N1bXkrPTNEPQp0
aGlzLnNlcmllc1thb10uX3N1bXk7dGhpcy5fc3VteCs9M0R0aGlzLnNlcmllc1thb10uX3N1bXh9
dmFyIGFtO2Zvcih2YXIgYWw9Cj0zRDA7YWw8MTI7YWwrKyl7YW09M0RVW2FsXTt2YXIgYW49M0R0
aGlzLmF4ZXNbYW1dLl90aWNrcztmb3IodmFyIGFvPTNEMDthbz0KPGFuLmxlbmd0aDthbysrKXt2
YXIgYXA9M0Rhblthb10uX2VsZW07aWYoYXApe2lmKEwuanFwbG90LnVzZV9leGNhbnZhcyYmd2lu
PQpkb3cuR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQhPTNEPTNEdSl7d2luZG93Lkdf
dm1sQ2FudmFzTWFuYWdlci51bmk9Cm5pdEVsZW1lbnQoYXAuZ2V0KDApKX1hcC5lbXB0eUZvcmNl
KCk7YXA9M0RudWxsO2FuLl9lbGVtPTNEbnVsbH19YW49M0RudWxsOz0KdGhpcy5heGVzW2FtXS5f
cGxvdERpbWVuc2lvbnM9M0R0aGlzLl9wbG90RGltZW5zaW9uczt0aGlzLmF4ZXNbYW1dLl90aWNr
cz0KPTNEW119aWYodGhpcy5zb3J0RGF0YSl7YWgodGhpcy5zZXJpZXMpfXRoaXMuZ3JpZC5fYXhl
cz0zRHRoaXMuYXhlczt0aGlzLmxlPQpnZW5kLl9zZXJpZXM9M0R0aGlzLnNlcmllc307ZnVuY3Rp
b24gYWgoYXApe3ZhciBhdSxhdixhdyxhbCxhdDtmb3IodmFyIGFxPQo9M0QwO2FxPGFwLmxlbmd0
aDthcSsrKXt2YXIgYW07dmFyIGFyPTNEW2FwW2FxXS5kYXRhLGFwW2FxXS5fc3RhY2tEYXRhLGFw
W2E9CnFdLl9wbG90RGF0YSxhcFthcV0uX3ByZXZQbG90RGF0YV07Zm9yKHZhciBhbj0zRDA7YW48
NDthbisrKXthbT0zRHRydWU7YXU9Cj0zRGFyW2FuXTtpZihhcFthcV0uX3N0YWNrQXhpcz0zRD0z
RCJ4Iil7Zm9yKHZhciBhbz0zRDA7YW88YXUubGVuZ3RoO2FvKyspez0KaWYodHlwZW9mKGF1W2Fv
XVsxXSkhPTNEIm51bWJlciIpe2FtPTNEZmFsc2U7YnJlYWt9fWlmKGFtKXthdS5zb3J0KGZ1bmN0
aW9uPQooYXksYXgpe3JldHVybiBheVsxXS1heFsxXX0pfX1lbHNle2Zvcih2YXIgYW89M0QwO2Fv
PGF1Lmxlbmd0aDthbysrKXtpZih0eXA9CmVvZihhdVthb11bMF0pIT0zRCJudW1iZXIiKXthbT0z
RGZhbHNlO2JyZWFrfX1pZihhbSl7YXUuc29ydChmdW5jdGlvbihheSxheD0KKXtyZXR1cm4gYXlb
MF0tYXhbMF19KX19fX19dGhpcy5jb21wdXRlUGxvdERhdGE9M0RmdW5jdGlvbigpe3RoaXMuX3Bs
b3REYXRhPQo9M0RbXTt0aGlzLl9zdGFja0RhdGE9M0RbXTt2YXIgYXQsYXUsYW87Zm9yKGF1PTNE
MCxhbz0zRHRoaXMuc2VyaWVzLmxlbmd0aDs9CmF1PGFvO2F1Kyspe2F0PTNEdGhpcy5zZXJpZXNb
YXVdO3RoaXMuX3Bsb3REYXRhLnB1c2goW10pO3RoaXMuX3N0YWNrRGF0YS5wdT0Kc2goW10pO3Zh
ciBhbT0zRGF0LmRhdGE7dGhpcy5fcGxvdERhdGFbYXVdPTNETC5leHRlbmQodHJ1ZSxbXSxhbSk7
dGhpcy5fc3RhPQpja0RhdGFbYXVdPTNETC5leHRlbmQodHJ1ZSxbXSxhbSk7YXQuX3Bsb3REYXRh
PTNEdGhpcy5fcGxvdERhdGFbYXVdO2F0Ll9zdGE9CmNrRGF0YT0zRHRoaXMuX3N0YWNrRGF0YVth
dV07dmFyIGF4PTNEe3g6W10seTpbXX07aWYodGhpcy5zdGFja1NlcmllcyYmIWF0Lj0KZGlzYWJs
ZVN0YWNrKXthdC5fc3RhY2s9M0R0cnVlO3ZhciBhdj0zRChhdC5fc3RhY2tBeGlzPTNEPTNEPTNE
IngiKT8wOjE7Zm9yPQoodmFyIGFwPTNEMCxhbD0zRGFtLmxlbmd0aDthcDxhbDthcCsrKXt2YXIg
YXc9M0RhbVthcF1bYXZdO2lmKGF3PTNEPTNEbnVsbCk9Cnthdz0zRDB9dGhpcy5fcGxvdERhdGFb
YXVdW2FwXVthdl09M0Rhdzt0aGlzLl9zdGFja0RhdGFbYXVdW2FwXVthdl09M0RhdztpZj0KKGF1
PjApe2Zvcih2YXIgYXE9M0RhdTthcS0tOyl7dmFyIGFuPTNEdGhpcy5fcGxvdERhdGFbYXFdW2Fw
XVthdl07aWYoYXcqYW4+PQo9M0QwKXt0aGlzLl9wbG90RGF0YVthdV1bYXBdW2F2XSs9M0Rhbjt0
aGlzLl9zdGFja0RhdGFbYXVdW2FwXVthdl0rPTNEYW47YnI9CmVha319fX19ZWxzZXtmb3IodmFy
IGFyPTNEMDthcjxhdC5kYXRhLmxlbmd0aDthcisrKXtheC54LnB1c2goYXQuZGF0YVthcl1bMD0K
XSk7YXgueS5wdXNoKGF0LmRhdGFbYXJdWzFdKX10aGlzLl9zdGFja0RhdGEucHVzaChhdC5kYXRh
KTt0aGlzLnNlcmllc1thdV0uPQpfc3RhY2tEYXRhPTNEYXQuZGF0YTt0aGlzLl9wbG90RGF0YS5w
dXNoKGF0LmRhdGEpO2F0Ll9wbG90RGF0YT0zRGF0LmRhdGE7YXQ9Ci5fcGxvdFZhbHVlcz0zRGF4
fWlmKGF1PjApe2F0Ll9wcmV2UGxvdERhdGE9M0R0aGlzLnNlcmllc1thdS0xXS5fcGxvdERhdGF9
YT0KdC5fc3VteT0zRDA7YXQuX3N1bXg9M0QwO2Zvcihhcj0zRGF0LmRhdGEubGVuZ3RoLTE7YXI+
LTE7YXItLSl7YXQuX3N1bXkrPTNEPQphdC5kYXRhW2FyXVsxXTthdC5fc3VteCs9M0RhdC5kYXRh
W2FyXVswXX19fTt0aGlzLnBvcHVsYXRlUGxvdERhdGE9M0RmdW5jdGk9Cm9uKGF1LGF2KXt0aGlz
Ll9wbG90RGF0YT0zRFtdO3RoaXMuX3N0YWNrRGF0YT0zRFtdO2F1Ll9zdGFja0RhdGE9M0RbXTth
dS5fcD0KbG90RGF0YT0zRFtdO3ZhciBheT0zRHt4OltdLHk6W119O2lmKHRoaXMuc3RhY2tTZXJp
ZXMmJiFhdS5kaXNhYmxlU3RhY2spe2F1PQouX3N0YWNrPTNEdHJ1ZTt2YXIgYXg9M0QoYXUuX3N0
YWNrQXhpcz0zRD0zRD0zRCJ4Iik/MDoxO3ZhciBhej0zREwuZXh0ZW5kKHQ9CnJ1ZSxbXSxhdS5k
YXRhKTt2YXIgYUE9M0RMLmV4dGVuZCh0cnVlLFtdLGF1LmRhdGEpO3ZhciBhbixhbSxhbyxhdyxh
bDtmb3Iodj0KYXIgYXI9M0QwO2FyPGF2O2FyKyspe3ZhciBhcD0zRHRoaXMuc2VyaWVzW2FyXS5k
YXRhO2Zvcih2YXIgYXE9M0QwO2FxPGFwLmxlPQpuZ3RoO2FxKyspe2FvPTNEYXBbYXFdO2FuPTNE
KGFvWzBdIT0zRG51bGwpP2FvWzBdOjA7YW09M0QoYW9bMV0hPTNEbnVsbCk/YW89ClsxXTowO2F6
W2FxXVswXSs9M0RhbjthelthcV1bMV0rPTNEYW07YXc9M0QoYXgpP2FtOmFuO2lmKGF1LmRhdGFb
YXFdW2F4XSphdz0KPj0zRDApe2FBW2FxXVtheF0rPTNEYXd9fX1mb3IodmFyIGF0PTNEMDthdDxh
QS5sZW5ndGg7YXQrKyl7YXkueC5wdXNoKGFBW2F0PQpdWzBdKTtheS55LnB1c2goYUFbYXRdWzFd
KX10aGlzLl9wbG90RGF0YS5wdXNoKGFBKTt0aGlzLl9zdGFja0RhdGEucHVzaChheik9CjthdS5f
c3RhY2tEYXRhPTNEYXo7YXUuX3Bsb3REYXRhPTNEYUE7YXUuX3Bsb3RWYWx1ZXM9M0RheX1lbHNl
e2Zvcih2YXIgYXQ9Cj0zRDA7YXQ8YXUuZGF0YS5sZW5ndGg7YXQrKyl7YXkueC5wdXNoKGF1LmRh
dGFbYXRdWzBdKTtheS55LnB1c2goYXUuZGF0YVthdD0KXVsxXSl9dGhpcy5fc3RhY2tEYXRhLnB1
c2goYXUuZGF0YSk7dGhpcy5zZXJpZXNbYXZdLl9zdGFja0RhdGE9M0RhdS5kYXRhO3RoPQppcy5f
cGxvdERhdGEucHVzaChhdS5kYXRhKTthdS5fcGxvdERhdGE9M0RhdS5kYXRhO2F1Ll9wbG90VmFs
dWVzPTNEYXl9aWYoYXY9Cj4wKXthdS5fcHJldlBsb3REYXRhPTNEdGhpcy5zZXJpZXNbYXYtMV0u
X3Bsb3REYXRhfWF1Ll9zdW15PTNEMDthdS5fc3VteD0zRD0KMDtmb3IoYXQ9M0RhdS5kYXRhLmxl
bmd0aC0xO2F0Pi0xO2F0LS0pe2F1Ll9zdW15Kz0zRGF1LmRhdGFbYXRdWzFdO2F1Ll9zdW14PQor
PTNEYXUuZGF0YVthdF1bMF19fTt0aGlzLmdldE5leHRTZXJpZXNDb2xvcj0zRChmdW5jdGlvbihh
bSl7dmFyIGFsPTNEMDt2YXI9CiBhbj0zRGFtLnNlcmllc0NvbG9ycztyZXR1cm4gZnVuY3Rpb24o
KXtpZihhbDxhbi5sZW5ndGgpe3JldHVybiBhblthbCsrXX1lbD0Kc2V7YWw9M0QwO3JldHVybiBh
blthbCsrXX19fSkodGhpcyk7dGhpcy5wYXJzZU9wdGlvbnM9M0RmdW5jdGlvbihheSl7Zm9yKHZh
PQpyIGF0PTNEMDthdDx0aGlzLnByZVBhcnNlT3B0aW9uc0hvb2tzLmhvb2tzLmxlbmd0aDthdCsr
KXt0aGlzLnByZVBhcnNlT3B0aW89Cm5zSG9va3MuaG9va3NbYXRdLmNhbGwodGhpcyxheSl9Zm9y
KHZhciBhdD0zRDA7YXQ8TC5qcXBsb3QucHJlUGFyc2VPcHRpb25zSD0Kb29rcy5sZW5ndGg7YXQr
Kyl7TC5qcXBsb3QucHJlUGFyc2VPcHRpb25zSG9va3NbYXRdLmNhbGwodGhpcyxheSl9dGhpcy5v
cHRpPQpvbnM9M0RMLmV4dGVuZCh0cnVlLHt9LHRoaXMuZGVmYXVsdHMsYXkpO3ZhciBhbT0zRHRo
aXMub3B0aW9uczt0aGlzLmFuaW1hdGU9Cj0zRGFtLmFuaW1hdGU7dGhpcy5hbmltYXRlUmVwbG90
PTNEYW0uYW5pbWF0ZVJlcGxvdDt0aGlzLnN0YWNrU2VyaWVzPTNEYW0ucz0KdGFja1Nlcmllcztp
ZihMLmlzUGxhaW5PYmplY3QoYW0uZmlsbEJldHdlZW4pKXt2YXIgYXg9M0RbInNlcmllczEiLCJz
ZXJpZXMyPQoiLCJjb2xvciIsImJhc2VTZXJpZXMiLCJmaWxsIl0sYXU7Zm9yKHZhciBhdD0zRDAs
YXE9M0RheC5sZW5ndGg7YXQ8YXE7YXQrKyk9CnthdT0zRGF4W2F0XTtpZihhbS5maWxsQmV0d2Vl
blthdV0hPTNEbnVsbCl7dGhpcy5maWxsQmV0d2VlblthdV09M0RhbS5maWxsQj0KZXR3ZWVuW2F1
XX19fWlmKGFtLnNlcmllc0NvbG9ycyl7dGhpcy5zZXJpZXNDb2xvcnM9M0RhbS5zZXJpZXNDb2xv
cnN9aWYoYW0uPQpuZWdhdGl2ZVNlcmllc0NvbG9ycyl7dGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9y
cz0zRGFtLm5lZ2F0aXZlU2VyaWVzQ29sb3JzfWk9CmYoYW0uY2FwdHVyZVJpZ2h0Q2xpY2spe3Ro
aXMuY2FwdHVyZVJpZ2h0Q2xpY2s9M0RhbS5jYXB0dXJlUmlnaHRDbGlja310aGlzLj0KZGVmYXVs
dEF4aXNTdGFydD0zRChheSYmYXkuZGVmYXVsdEF4aXNTdGFydCE9M0RudWxsKT9heS5kZWZhdWx0
QXhpc1N0YXJ0OnRoPQppcy5kZWZhdWx0QXhpc1N0YXJ0O3RoaXMuY29sb3JHZW5lcmF0b3Iuc2V0
Q29sb3JzKHRoaXMuc2VyaWVzQ29sb3JzKTt0aGlzLm49CmVnYXRpdmVDb2xvckdlbmVyYXRvci5z
ZXRDb2xvcnModGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9ycyk7TC5leHRlbmQodHJ1ZSx0aD0KaXMu
X2dyaWRQYWRkaW5nLGFtLmdyaWRQYWRkaW5nKTt0aGlzLnNvcnREYXRhPTNEKGFtLnNvcnREYXRh
IT0zRG51bGwpP2FtLnNvPQpydERhdGE6dGhpcy5zb3J0RGF0YTtmb3IodmFyIGF0PTNEMDthdDwx
MjthdCsrKXt2YXIgYW49M0RVW2F0XTt2YXIgYXA9M0R0aGk9CnMuYXhlc1thbl07YXAuX29wdGlv
bnM9M0RMLmV4dGVuZCh0cnVlLHt9LGFtLmF4ZXNEZWZhdWx0cyxhbS5heGVzW2FuXSk7TC5leD0K
dGVuZCh0cnVlLGFwLGFtLmF4ZXNEZWZhdWx0cyxhbS5heGVzW2FuXSk7YXAuX3Bsb3RXaWR0aD0z
RHRoaXMuX3dpZHRoO2FwLl9wPQpsb3RIZWlnaHQ9M0R0aGlzLl9oZWlnaHR9dmFyIGF3PTNEZnVu
Y3Rpb24oYUQsYUIsYUUpe3ZhciBhQT0zRFtdO3ZhciBhQyxhejs9CmFCPTNEYUJ8fCJ2ZXJ0aWNh
bCI7aWYoIUwuaXNBcnJheShhRFswXSkpe2ZvcihhQz0zRDAsYXo9M0RhRC5sZW5ndGg7YUM8YXo7
YT0KQysrKXtpZihhQj0zRD0zRCJ2ZXJ0aWNhbCIpe2FBLnB1c2goW2FFK2FDLGFEW2FDXV0pfWVs
c2V7YUEucHVzaChbYURbYUNdLGFFPQorYUNdKX19fWVsc2V7TC5leHRlbmQodHJ1ZSxhQSxhRCl9
cmV0dXJuIGFBfTt2YXIgYXY9M0QwO3RoaXMuc2VyaWVzPTNEW107Zm89CnIodmFyIGF0PTNEMDth
dDx0aGlzLmRhdGEubGVuZ3RoO2F0Kyspe3ZhciBhbD0zREwuZXh0ZW5kKHRydWUse2luZGV4OmF0
fSx7cz0KZXJpZXNDb2xvcnM6dGhpcy5zZXJpZXNDb2xvcnMsbmVnYXRpdmVTZXJpZXNDb2xvcnM6
dGhpcy5uZWdhdGl2ZVNlcmllc0NvbG9yPQpzfSx0aGlzLm9wdGlvbnMuc2VyaWVzRGVmYXVsdHMs
dGhpcy5vcHRpb25zLnNlcmllc1thdF0se3JlbmRlcmVyT3B0aW9uczp7YW49CmltYXRpb246e3No
b3c6dGhpcy5hbmltYXRlfX19KTt2YXIgYXg9M0RuZXcgUyhhbCk7Zm9yKHZhciBhcj0zRDA7YXI8
TC5qcXBsbz0KdC5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5sZW5ndGg7YXIrKyl7TC5qcXBs
b3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9vPQprc1thcl0uY2FsbChheCx0aGlzLm9wdGlvbnMu
c2VyaWVzRGVmYXVsdHMsdGhpcy5vcHRpb25zLnNlcmllc1thdF0pfWZvcih2YXI9CiBhcj0zRDA7
YXI8dGhpcy5wcmVQYXJzZVNlcmllc09wdGlvbnNIb29rcy5ob29rcy5sZW5ndGg7YXIrKyl7dGhp
cy5wcmVQYXJzZT0KU2VyaWVzT3B0aW9uc0hvb2tzLmhvb2tzW2FyXS5jYWxsKGF4LHRoaXMub3B0
aW9ucy5zZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvPQpucy5zZXJpZXNbYXRdKX1MLmV4dGVuZCh0
cnVlLGF4LGFsKTt2YXIgYW89M0QidmVydGljYWwiO2lmKGF4LnJlbmRlcmVyPTNEPQo9M0Q9M0RM
LmpxcGxvdC5CYXJSZW5kZXJlciYmYXgucmVuZGVyZXJPcHRpb25zJiZheC5yZW5kZXJlck9wdGlv
bnMuYmFyRGlyZWM9CnRpb249M0Q9M0QiaG9yaXpvbnRhbCIpe2FvPTNEImhvcml6b250YWwiO2F4
Ll9zdGFja0F4aXM9M0QieCI7YXguX3ByaW1hcnlBeD0KaXM9M0QiX3lheGlzIn1heC5kYXRhPTNE
YXcodGhpcy5kYXRhW2F0XSxhbyx0aGlzLmRlZmF1bHRBeGlzU3RhcnQpO3N3aXRjaChhPQp4Lnhh
eGlzKXtjYXNlInhheGlzIjpheC5feGF4aXM9M0R0aGlzLmF4ZXMueGF4aXM7YnJlYWs7Y2FzZSJ4
MmF4aXMiOmF4Ll94YXg9CmlzPTNEdGhpcy5heGVzLngyYXhpczticmVhaztkZWZhdWx0OmJyZWFr
fWF4Ll95YXhpcz0zRHRoaXMuYXhlc1theC55YXhpc107YT0KeC5feGF4aXMuX3Nlcmllcy5wdXNo
KGF4KTtheC5feWF4aXMuX3Nlcmllcy5wdXNoKGF4KTtpZihheC5zaG93KXtheC5feGF4aXMuPQpz
aG93PTNEdHJ1ZTtheC5feWF4aXMuc2hvdz0zRHRydWV9ZWxzZXtpZihheC5feGF4aXMuc2NhbGVU
b0hpZGRlblNlcmllcyl7YXg9Ci5feGF4aXMuc2hvdz0zRHRydWV9aWYoYXguX3lheGlzLnNjYWxl
VG9IaWRkZW5TZXJpZXMpe2F4Ll95YXhpcy5zaG93PTNEdHJ1ZT0KfX1pZighYXgubGFiZWwpe2F4
LmxhYmVsPTNEIlNlcmllcyAiKyhhdCsxKS50b1N0cmluZygpfXRoaXMuc2VyaWVzLnB1c2goYXgp
PQo7Zm9yKHZhciBhcj0zRDA7YXI8TC5qcXBsb3QucG9zdFBhcnNlU2VyaWVzT3B0aW9uc0hvb2tz
Lmxlbmd0aDthcisrKXtMLmpxcGw9Cm90LnBvc3RQYXJzZVNlcmllc09wdGlvbnNIb29rc1thcl0u
Y2FsbCh0aGlzLnNlcmllc1thdF0sdGhpcy5vcHRpb25zLnNlcmllcz0KRGVmYXVsdHMsdGhpcy5v
cHRpb25zLnNlcmllc1thdF0pfWZvcih2YXIgYXI9M0QwO2FyPHRoaXMucG9zdFBhcnNlU2VyaWVz
T3B0PQppb25zSG9va3MuaG9va3MubGVuZ3RoO2FyKyspe3RoaXMucG9zdFBhcnNlU2VyaWVzT3B0
aW9uc0hvb2tzLmhvb2tzW2FyXS5jYWw9CmwodGhpcy5zZXJpZXNbYXRdLHRoaXMub3B0aW9ucy5z
ZXJpZXNEZWZhdWx0cyx0aGlzLm9wdGlvbnMuc2VyaWVzW2F0XSl9fUwuZT0KeHRlbmQodHJ1ZSx0
aGlzLmdyaWQsdGhpcy5vcHRpb25zLmdyaWQpO2Zvcih2YXIgYXQ9M0QwLGFxPTNEVS5sZW5ndGg7
YXQ8YXE7PQphdCsrKXt2YXIgYW49M0RVW2F0XTt2YXIgYXA9M0R0aGlzLmF4ZXNbYW5dO2lmKGFw
LmJvcmRlcldpZHRoPTNEPTNEbnVsbCl7YXA9Ci5ib3JkZXJXaWR0aD0zRHRoaXMuZ3JpZC5ib3Jk
ZXJXaWR0aH19aWYodHlwZW9mIHRoaXMub3B0aW9ucy50aXRsZT0zRD0zRCJzdD0KcmluZyIpe3Ro
aXMudGl0bGUudGV4dD0zRHRoaXMub3B0aW9ucy50aXRsZX1lbHNle2lmKHR5cGVvZiB0aGlzLm9w
dGlvbnMudGl0PQpsZT0zRD0zRCJvYmplY3QiKXtMLmV4dGVuZCh0cnVlLHRoaXMudGl0bGUsdGhp
cy5vcHRpb25zLnRpdGxlKX19dGhpcy50aXRsZS49Cl9wbG90V2lkdGg9M0R0aGlzLl93aWR0aDt0
aGlzLmxlZ2VuZC5zZXRPcHRpb25zKHRoaXMub3B0aW9ucy5sZWdlbmQpO2Zvcih2YT0KciBhdD0z
RDA7YXQ8TC5qcXBsb3QucG9zdFBhcnNlT3B0aW9uc0hvb2tzLmxlbmd0aDthdCsrKXtMLmpxcGxv
dC5wb3N0UGFyc2VPPQpwdGlvbnNIb29rc1thdF0uY2FsbCh0aGlzLGF5KX1mb3IodmFyIGF0PTNE
MDthdDx0aGlzLnBvc3RQYXJzZU9wdGlvbnNIb29rcy49Cmhvb2tzLmxlbmd0aDthdCsrKXt0aGlz
LnBvc3RQYXJzZU9wdGlvbnNIb29rcy5ob29rc1thdF0uY2FsbCh0aGlzLGF5KX19O3RoaT0Kcy5k
ZXN0cm95PTNEZnVuY3Rpb24oKXt0aGlzLmNhbnZhc01hbmFnZXIuZnJlZUFsbENhbnZhc2VzKCk7
aWYodGhpcy5ldmVudENhPQpudmFzJiZ0aGlzLmV2ZW50Q2FudmFzLl9lbGVtKXt0aGlzLmV2ZW50
Q2FudmFzLl9lbGVtLnVuYmluZCgpfXRoaXMudGFyZ2V0LmU9Cm1wdHkoKTt0aGlzLnRhcmdldFsw
XS5pbm5lckhUTUw9M0QiIn07dGhpcy5yZXBsb3Q9M0RmdW5jdGlvbihhbSl7dmFyIGFuPTNEYT0K
bXx8e307dmFyIGFwPTNEYW4uZGF0YXx8bnVsbDt2YXIgYWw9M0QoYW4uY2xlYXI9M0Q9M0Q9M0Rm
YWxzZSk/ZmFsc2U6dHJ1ZTt2PQphciBhbz0zRGFuLnJlc2V0QXhlc3x8ZmFsc2U7ZGVsZXRlIGFu
LmRhdGE7ZGVsZXRlIGFuLmNsZWFyO2RlbGV0ZSBhbi5yZXNldEE9Cnhlczt0aGlzLnRhcmdldC50
cmlnZ2VyKCJqcXBsb3RQcmVSZXBsb3QiKTtpZihhbCl7dGhpcy5kZXN0cm95KCl9aWYoYXB8fCFM
Lj0KaXNFbXB0eU9iamVjdChhbikpe3RoaXMucmVJbml0aWFsaXplKGFwLGFuKX1lbHNle3RoaXMu
cXVpY2tJbml0KCl9aWYoYW8pe3RoPQppcy5yZXNldEF4ZXNTY2FsZShhbyxhbi5heGVzKX10aGlz
LmRyYXcoKTt0aGlzLnRhcmdldC50cmlnZ2VyKCJqcXBsb3RQb3N0UmU9CnBsb3QiKX07dGhpcy5y
ZWRyYXc9M0RmdW5jdGlvbihhbCl7YWw9M0QoYWwhPTNEbnVsbCk/YWw6dHJ1ZTt0aGlzLnRhcmdl
dC50cj0KaWdnZXIoImpxcGxvdFByZVJlZHJhdyIpO2lmKGFsKXt0aGlzLmNhbnZhc01hbmFnZXIu
ZnJlZUFsbENhbnZhc2VzKCk7dGhpcy5lPQp2ZW50Q2FudmFzLl9lbGVtLnVuYmluZCgpO3RoaXMu
dGFyZ2V0LmVtcHR5KCl9Zm9yKHZhciBhbiBpbiB0aGlzLmF4ZXMpe3RoaXM9Ci5heGVzW2FuXS5f
dGlja3M9M0RbXX10aGlzLmNvbXB1dGVQbG90RGF0YSgpO3RoaXMuX3N1bXk9M0QwO3RoaXMuX3N1
bXg9M0QwOz0KZm9yKHZhciBhbT0zRDAsYW89M0R0aGlzLnNlcmllcy5sZW5ndGg7YW08YW87YW0r
Kyl7dGhpcy5fc3VteSs9M0R0aGlzLnNlcmllPQpzW2FtXS5fc3VteTt0aGlzLl9zdW14Kz0zRHRo
aXMuc2VyaWVzW2FtXS5fc3VteH10aGlzLmRyYXcoKTt0aGlzLnRhcmdldC50cmk9CmdnZXIoImpx
cGxvdFBvc3RSZWRyYXciKX07dGhpcy5kcmF3PTNEZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdJZkhp
ZGRlbnx8dGhpcz0KLnRhcmdldC5pcygiOnZpc2libGUiKSl7dGhpcy50YXJnZXQudHJpZ2dlcigi
anFwbG90UHJlRHJhdyIpO3ZhciBhSCxhRixhRSxhPQpvO2ZvcihhSD0zRDAsYUU9M0RMLmpxcGxv
dC5wcmVEcmF3SG9va3MubGVuZ3RoO2FIPGFFO2FIKyspe0wuanFwbG90LnByZURyYXc9Ckhvb2tz
W2FIXS5jYWxsKHRoaXMpfWZvcihhSD0zRDAsYUU9M0R0aGlzLnByZURyYXdIb29rcy5ob29rcy5s
ZW5ndGg7YUg8YUU7YT0KSCsrKXt0aGlzLnByZURyYXdIb29rcy5ob29rc1thSF0uYXBwbHkodGhp
cyx0aGlzLnByZURyYXdTZXJpZXNIb29rcy5hcmdzW2FIPQpdKX10aGlzLnRhcmdldC5hcHBlbmQo
dGhpcy5iYXNlQ2FudmFzLmNyZWF0ZUVsZW1lbnQoe2xlZnQ6MCxyaWdodDowLHRvcDowLGI9Cm90
dG9tOjB9LCJqcXBsb3QtYmFzZS1jYW52YXMiLG51bGwsdGhpcykpO3RoaXMuYmFzZUNhbnZhcy5z
ZXRDb250ZXh0KCk7dGhpcz0KLnRhcmdldC5hcHBlbmQodGhpcy50aXRsZS5kcmF3KCkpO3RoaXMu
dGl0bGUucGFjayh7dG9wOjAsbGVmdDowfSk7dmFyIGFMPTNEPQp0aGlzLmxlZ2VuZC5kcmF3KHt9
LHRoaXMpO3ZhciBhbD0zRHt0b3A6MCxsZWZ0OjAsYm90dG9tOjAscmlnaHQ6MH07aWYodGhpcy49
CmxlZ2VuZC5wbGFjZW1lbnQ9M0Q9M0Qib3V0c2lkZUdyaWQiKXt0aGlzLnRhcmdldC5hcHBlbmQo
YUwpO3N3aXRjaCh0aGlzLmxlZz0KZW5kLmxvY2F0aW9uKXtjYXNlIm4iOmFsLnRvcCs9M0R0aGlz
LmxlZ2VuZC5nZXRIZWlnaHQoKTticmVhaztjYXNlInMiOmFsLmJvPQp0dG9tKz0zRHRoaXMubGVn
ZW5kLmdldEhlaWdodCgpO2JyZWFrO2Nhc2UibmUiOmNhc2UiZSI6Y2FzZSJzZSI6YWwucmlnaHQr
PQo9M0R0aGlzLmxlZ2VuZC5nZXRXaWR0aCgpO2JyZWFrO2Nhc2UibnciOmNhc2UidyI6Y2FzZSJz
dyI6YWwubGVmdCs9M0R0aGlzLmw9CmVnZW5kLmdldFdpZHRoKCk7YnJlYWs7ZGVmYXVsdDphbC5y
aWdodCs9M0R0aGlzLmxlZ2VuZC5nZXRXaWR0aCgpO2JyZWFrfWFMPQo9M0RhTC5kZXRhY2goKX12
YXIgYXI9M0R0aGlzLmF4ZXM7dmFyIGFNO2ZvcihhSD0zRDA7YUg8MTI7YUgrKyl7YU09M0RVW2FI
XTs9CnRoaXMudGFyZ2V0LmFwcGVuZChhclthTV0uZHJhdyh0aGlzLmJhc2VDYW52YXMuX2N0eCx0
aGlzKSk7YXJbYU1dLnNldCgpfWlmKD0KYXIueWF4aXMuc2hvdyl7YWwubGVmdCs9M0Rhci55YXhp
cy5nZXRXaWR0aCgpfXZhciBhRz0zRFsieTJheGlzIiwieTNheGlzIiwiPQp5NGF4aXMiLCJ5NWF4
aXMiLCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMiLCJ5OWF4aXMiXTt2YXIgYXo9M0RbMCwwLDAs
MCwwLDA9CiwwLDBdO3ZhciBhQz0zRDA7dmFyIGFCO2ZvcihhQj0zRDA7YUI8ODthQisrKXtpZihh
clthR1thQl1dLnNob3cpe2FDKz0zRGFyWz0KYUdbYUJdXS5nZXRXaWR0aCgpO2F6W2FCXT0zRGFD
fX1hbC5yaWdodCs9M0RhQztpZihhci54MmF4aXMuc2hvdyl7YWwudG9wKz0KPTNEYXIueDJheGlz
LmdldEhlaWdodCgpfWlmKHRoaXMudGl0bGUuc2hvdyl7YWwudG9wKz0zRHRoaXMudGl0bGUuZ2V0
SGVpZ2h0PQooKX1pZihhci54YXhpcy5zaG93KXthbC5ib3R0b20rPTNEYXIueGF4aXMuZ2V0SGVp
Z2h0KCl9aWYodGhpcy5vcHRpb25zLmdyaWQ9CkRpbWVuc2lvbnMmJkwuaXNQbGFpbk9iamVjdCh0
aGlzLm9wdGlvbnMuZ3JpZERpbWVuc2lvbnMpKXt2YXIgYXQ9M0RwYXJzZUludD0KKHRoaXMub3B0
aW9ucy5ncmlkRGltZW5zaW9ucy53aWR0aCwxMCl8fDA7dmFyIGFJPTNEcGFyc2VJbnQodGhpcy5v
cHRpb25zLmdyPQppZERpbWVuc2lvbnMuaGVpZ2h0LDEwKXx8MDt2YXIgYW49M0QodGhpcy5fd2lk
dGgtYWwubGVmdC1hbC5yaWdodC1hdCkvMjt2YXI9CiBhSz0zRCh0aGlzLl9oZWlnaHQtYWwudG9w
LWFsLmJvdHRvbS1hSSkvMjtpZihhSz49M0QwJiZhbj49M0QwKXthbC50b3ArPTNEYT0KSzthbC5i
b3R0b20rPTNEYUs7YWwubGVmdCs9M0RhbjthbC5yaWdodCs9M0Rhbn19dmFyIGFtPTNEWyJ0b3Ai
LCJib3R0b20iLCJsPQplZnQiLCJyaWdodCJdO2Zvcih2YXIgYUIgaW4gYW0pe2lmKHRoaXMuX2dy
aWRQYWRkaW5nW2FtW2FCXV09M0Q9M0RudWxsJiZhbFs9CmFtW2FCXV0+MCl7dGhpcy5fZ3JpZFBh
ZGRpbmdbYW1bYUJdXT0zRGFsW2FtW2FCXV19ZWxzZXtpZih0aGlzLl9ncmlkUGFkZGluZz0KW2Ft
W2FCXV09M0Q9M0RudWxsKXt0aGlzLl9ncmlkUGFkZGluZ1thbVthQl1dPTNEdGhpcy5fZGVmYXVs
dEdyaWRQYWRkaW5nW2FtPQpbYUJdXX19fXZhciBhQT0zRHRoaXMuX2dyaWRQYWRkaW5nO2lmKHRo
aXMubGVnZW5kLnBsYWNlbWVudD0zRD0zRD0zRCJvdXRzaWQ9CmVHcmlkIil7YUE9M0R7dG9wOnRo
aXMudGl0bGUuZ2V0SGVpZ2h0KCksbGVmdDowLHJpZ2h0OjAsYm90dG9tOjB9O2lmKHRoaXMubD0K
ZWdlbmQubG9jYXRpb249M0Q9M0Q9M0QicyIpe2FBLmxlZnQ9M0R0aGlzLl9ncmlkUGFkZGluZy5s
ZWZ0O2FBLnJpZ2h0PTNEdGhpPQpzLl9ncmlkUGFkZGluZy5yaWdodH19YXIueGF4aXMucGFjayh7
cG9zaXRpb246ImFic29sdXRlIixib3R0b206dGhpcy5fZ3JpZFA9CmFkZGluZy5ib3R0b20tYXIu
eGF4aXMuZ2V0SGVpZ2h0KCksbGVmdDowLHdpZHRoOnRoaXMuX3dpZHRofSx7bWluOnRoaXMuX2dy
aT0KZFBhZGRpbmcubGVmdCxtYXg6dGhpcy5fd2lkdGgtdGhpcy5fZ3JpZFBhZGRpbmcucmlnaHR9
KTthci55YXhpcy5wYWNrKHtwb3NpPQp0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDp0aGlzLl9n
cmlkUGFkZGluZy5sZWZ0LWFyLnlheGlzLmdldFdpZHRoKCksaGVpZ2g9CnQ6dGhpcy5faGVpZ2h0
fSx7bWluOnRoaXMuX2hlaWdodC10aGlzLl9ncmlkUGFkZGluZy5ib3R0b20sbWF4OnRoaXMuX2dy
aWRQYT0KZGRpbmcudG9wfSk7YXIueDJheGlzLnBhY2soe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9w
OnRoaXMuX2dyaWRQYWRkaW5nLnRvcC1hPQpyLngyYXhpcy5nZXRIZWlnaHQoKSxsZWZ0OjAsd2lk
dGg6dGhpcy5fd2lkdGh9LHttaW46dGhpcy5fZ3JpZFBhZGRpbmcubGVmdCw9Cm1heDp0aGlzLl93
aWR0aC10aGlzLl9ncmlkUGFkZGluZy5yaWdodH0pO2ZvcihhSD0zRDg7YUg+MDthSC0tKXthclth
R1thSC0xXT0KXS5wYWNrKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLHJpZ2h0OnRoaXMuX2dy
aWRQYWRkaW5nLnJpZ2h0LWF6W2FILTFdfSx7PQptaW46dGhpcy5faGVpZ2h0LXRoaXMuX2dyaWRQ
YWRkaW5nLmJvdHRvbSxtYXg6dGhpcy5fZ3JpZFBhZGRpbmcudG9wfSl9dmFyIGE9CnU9M0QodGhp
cy5fd2lkdGgtdGhpcy5fZ3JpZFBhZGRpbmcubGVmdC10aGlzLl9ncmlkUGFkZGluZy5yaWdodCkv
Mit0aGlzLl9ncj0KaWRQYWRkaW5nLmxlZnQtYXIueU1pZEF4aXMuZ2V0V2lkdGgoKS8yO2FyLnlN
aWRBeGlzLnBhY2soe3Bvc2l0aW9uOiJhYnNvbHV0PQplIix0b3A6MCxsZWZ0OmF1LHpJbmRleDo5
LHRleHRBbGlnbjoiY2VudGVyIn0se21pbjp0aGlzLl9oZWlnaHQtdGhpcy5fZ3JpZFA9CmFkZGlu
Zy5ib3R0b20sbWF4OnRoaXMuX2dyaWRQYWRkaW5nLnRvcH0pO3RoaXMudGFyZ2V0LmFwcGVuZCh0
aGlzLmdyaWQuY3JlYT0KdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLHRoaXMpKTt0aGlzLmdy
aWQuZHJhdygpO3ZhciBhcT0zRHRoaXMuc2VyaWVzO3ZhPQpyIGFKPTNEYXEubGVuZ3RoO2Zvcihh
SD0zRDAsYUU9M0RhSjthSDxhRTthSCsrKXthRj0zRHRoaXMuc2VyaWVzU3RhY2tbYUhdO3Q9Cmhp
cy50YXJnZXQuYXBwZW5kKGFxW2FGXS5zaGFkb3dDYW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9n
cmlkUGFkZGluZywianFwbD0Kb3Qtc2VyaWVzLXNoYWRvd0NhbnZhcyIsbnVsbCx0aGlzKSk7YXFb
YUZdLnNoYWRvd0NhbnZhcy5zZXRDb250ZXh0KCk7YXFbYUZdPQouc2hhZG93Q2FudmFzLl9lbGVt
LmRhdGEoInNlcmllc0luZGV4IixhRil9Zm9yKGFIPTNEMCxhRT0zRGFKO2FIPGFFO2FIKyspe2E9
CkY9M0R0aGlzLnNlcmllc1N0YWNrW2FIXTt0aGlzLnRhcmdldC5hcHBlbmQoYXFbYUZdLmNhbnZh
cy5jcmVhdGVFbGVtZW50KHRoaT0Kcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1zZXJpZXMtY2FudmFz
IixudWxsLHRoaXMpKTthcVthRl0uY2FudmFzLnNldENvbnRleHQoPQopO2FxW2FGXS5jYW52YXMu
X2VsZW0uZGF0YSgic2VyaWVzSW5kZXgiLGFGKX10aGlzLnRhcmdldC5hcHBlbmQodGhpcy5ldmVu
dEM9CmFudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1ldmVudC1j
YW52YXMiLG51bGwsdGhpcykpO3RoaT0Kcy5ldmVudENhbnZhcy5zZXRDb250ZXh0KCk7dGhpcy5l
dmVudENhbnZhcy5fY3R4LmZpbGxTdHlsZT0zRCJyZ2JhKDAsMCwwLDApPQoiO3RoaXMuZXZlbnRD
YW52YXMuX2N0eC5maWxsUmVjdCgwLDAsdGhpcy5ldmVudENhbnZhcy5fY3R4LmNhbnZhcy53aWR0
aCx0aGk9CnMuZXZlbnRDYW52YXMuX2N0eC5jYW52YXMuaGVpZ2h0KTt0aGlzLmJpbmRDdXN0b21F
dmVudHMoKTtpZih0aGlzLmxlZ2VuZC5wcj0KZURyYXcpe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0u
YmVmb3JlKGFMKTt0aGlzLmxlZ2VuZC5wYWNrKGFBKTtpZih0aGlzLmxlZ2VuPQpkLl9lbGVtKXt0
aGlzLmRyYXdTZXJpZXMoe2xlZ2VuZEluZm86e2xvY2F0aW9uOnRoaXMubGVnZW5kLmxvY2F0aW9u
LHBsYWNlbWU9Cm50OnRoaXMubGVnZW5kLnBsYWNlbWVudCx3aWR0aDp0aGlzLmxlZ2VuZC5nZXRX
aWR0aCgpLGhlaWdodDp0aGlzLmxlZ2VuZC5nZT0KdEhlaWdodCgpLHhvZmZzZXQ6dGhpcy5sZWdl
bmQueG9mZnNldCx5b2Zmc2V0OnRoaXMubGVnZW5kLnlvZmZzZXR9fSl9ZWxzZXt0PQpoaXMuZHJh
d1NlcmllcygpfX1lbHNle3RoaXMuZHJhd1NlcmllcygpO2lmKGFKKXtMKGFxW2FKLTFdLmNhbnZh
cy5fZWxlbSkuYWY9CnRlcihhTCl9dGhpcy5sZWdlbmQucGFjayhhQSl9Zm9yKHZhciBhSD0zRDAs
YUU9M0RMLmpxcGxvdC5ldmVudExpc3RlbmVySG9vaz0Kcy5sZW5ndGg7YUg8YUU7YUgrKyl7dGhp
cy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKEwuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rPQpzW2FI
XVswXSx7cGxvdDp0aGlzfSxMLmpxcGxvdC5ldmVudExpc3RlbmVySG9va3NbYUhdWzFdKX1mb3Io
dmFyIGFIPTNEMCxhRT0KPTNEdGhpcy5ldmVudExpc3RlbmVySG9va3MuaG9va3MubGVuZ3RoO2FI
PGFFO2FIKyspe3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uPQpiaW5kKHRoaXMuZXZlbnRMaXN0ZW5l
ckhvb2tzLmhvb2tzW2FIXVswXSx7cGxvdDp0aGlzfSx0aGlzLmV2ZW50TGlzdGVuZXJIb289Cmtz
Lmhvb2tzW2FIXVsxXSl9dmFyIGF5PTNEdGhpcy5maWxsQmV0d2VlbjtpZihheS5maWxsJiZheS5z
ZXJpZXMxIT0zRD0zRGF5Lj0Kc2VyaWVzMiYmYXkuc2VyaWVzMTxhSiYmYXkuc2VyaWVzMjxhSiYm
YXFbYXkuc2VyaWVzMV0uX3R5cGU9M0Q9M0Q9M0QibGluZSImPQomYXFbYXkuc2VyaWVzMl0uX3R5
cGU9M0Q9M0Q9M0QibGluZSIpe3RoaXMuZG9GaWxsQmV0d2VlbkxpbmVzKCl9Zm9yKHZhciBhSD0K
PTNEMCxhRT0zREwuanFwbG90LnBvc3REcmF3SG9va3MubGVuZ3RoO2FIPGFFO2FIKyspe0wuanFw
bG90LnBvc3REcmF3SG9va3NbPQphSF0uY2FsbCh0aGlzKX1mb3IodmFyIGFIPTNEMCxhRT0zRHRo
aXMucG9zdERyYXdIb29rcy5ob29rcy5sZW5ndGg7YUg8YUU7YUg9CisrKXt0aGlzLnBvc3REcmF3
SG9va3MuaG9va3NbYUhdLmFwcGx5KHRoaXMsdGhpcy5wb3N0RHJhd0hvb2tzLmFyZ3NbYUhdKX1p
Zj0KKHRoaXMudGFyZ2V0LmlzKCI6dmlzaWJsZSIpKXt0aGlzLl9kcmF3Q291bnQrPTNEMX12YXIg
YXYsYXcsYUQsYXA7Zm9yKGFIPTNEPQowLGFFPTNEYUo7YUg8YUU7YUgrKyl7YXY9M0RhcVthSF07
YXc9M0Rhdi5yZW5kZXJlcjthRD0zRCIuanFwbG90LXBvaW50LWxhYmU9CmwuanFwbG90LXNlcmll
cy0iK2FIO2lmKGF3LmFuaW1hdGlvbiYmYXcuYW5pbWF0aW9uLl9zdXBwb3J0ZWQmJmF3LmFuaW1h
dGlvbj0KLnNob3cmJih0aGlzLl9kcmF3Q291bnQ8Mnx8dGhpcy5hbmltYXRlUmVwbG90KSl7YXA9
M0R0aGlzLnRhcmdldC5maW5kKGFEKTthPQpwLnN0b3AodHJ1ZSx0cnVlKS5oaWRlKCk7YXYuY2Fu
dmFzLl9lbGVtLnN0b3AodHJ1ZSx0cnVlKS5oaWRlKCk7YXYuc2hhZG93Q2E9Cm52YXMuX2VsZW0u
c3RvcCh0cnVlLHRydWUpLmhpZGUoKTthdi5jYW52YXMuX2VsZW0uanFwbG90RWZmZWN0KCJibGlu
ZCIse21vZD0KZToic2hvdyIsZGlyZWN0aW9uOmF3LmFuaW1hdGlvbi5kaXJlY3Rpb259LGF3LmFu
aW1hdGlvbi5zcGVlZCk7YXYuc2hhZG93Q2FuPQp2YXMuX2VsZW0uanFwbG90RWZmZWN0KCJibGlu
ZCIse21vZGU6InNob3ciLGRpcmVjdGlvbjphdy5hbmltYXRpb24uZGlyZWN0aW89Cm59LGF3LmFu
aW1hdGlvbi5zcGVlZCk7YXAuZmFkZUluKGF3LmFuaW1hdGlvbi5zcGVlZCowLjgpfX1hcD0zRG51
bGw7dGhpcy50YT0KcmdldC50cmlnZ2VyKCJqcXBsb3RQb3N0RHJhdyIsW3RoaXNdKX19O1IucHJv
dG90eXBlLmRvRmlsbEJldHdlZW5MaW5lcz0zRGZ1PQpuY3Rpb24oKXt2YXIgYW49M0R0aGlzLmZp
bGxCZXR3ZWVuO3ZhciBheD0zRGFuLnNlcmllczE7dmFyIGF2PTNEYW4uc2VyaWVzMjs9CnZhciBh
dz0zRChheDxhdik/YXg6YXY7dmFyIGF1PTNEKGF2PmF4KT9hdjpheDt2YXIgYXI9M0R0aGlzLnNl
cmllc1thd107dmFyID0KYXE9M0R0aGlzLnNlcmllc1thdV07aWYoYXEucmVuZGVyZXIuc21vb3Ro
KXt2YXIgYXA9M0RhcS5yZW5kZXJlci5fc21vb3RoZWREPQphdGEuc2xpY2UoMCkucmV2ZXJzZSgp
fWVsc2V7dmFyIGFwPTNEYXEuZ3JpZERhdGEuc2xpY2UoMCkucmV2ZXJzZSgpfWlmKGFyLnI9CmVu
ZGVyZXIuc21vb3RoKXt2YXIgYXQ9M0Rhci5yZW5kZXJlci5fc21vb3RoZWREYXRhLmNvbmNhdChh
cCl9ZWxzZXt2YXIgYXQ9Cj0zRGFyLmdyaWREYXRhLmNvbmNhdChhcCl9dmFyIGFvPTNEKGFuLmNv
bG9yIT0zRD0zRG51bGwpP2FuLmNvbG9yOnRoaXMuc2VyaT0KZXNbYXhdLmZpbGxDb2xvcjt2YXIg
YXk9M0QoYW4uYmFzZVNlcmllcyE9M0Q9M0RudWxsKT9hbi5iYXNlU2VyaWVzOmF3O3ZhciBhPQpt
PTNEdGhpcy5zZXJpZXNbYXldLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXI7dmFyIGFsPTNEe2ZpbGxT
dHlsZTphbyxmaWxsOnRydWU9CixjbG9zZVBhdGg6dHJ1ZX07YW0uZHJhdyhhci5zaGFkb3dDYW52
YXMuX2N0eCxhdCxhbCl9O3RoaXMuYmluZEN1c3RvbUV2ZW50cz0KPTNEZnVuY3Rpb24oKXt0aGlz
LmV2ZW50Q2FudmFzLl9lbGVtLmJpbmQoImNsaWNrIix7cGxvdDp0aGlzfSx0aGlzLm9uQ2xpY2sp
PQo7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iaW5kKCJkYmxjbGljayIse3Bsb3Q6dGhpc30sdGhp
cy5vbkRibENsaWNrKTt0aGlzLmU9CnZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2Vkb3duIix7
cGxvdDp0aGlzfSx0aGlzLm9uTW91c2VEb3duKTt0aGlzLmV2ZW50Qz0KYW52YXMuX2VsZW0uYmlu
ZCgibW91c2Vtb3ZlIix7cGxvdDp0aGlzfSx0aGlzLm9uTW91c2VNb3ZlKTt0aGlzLmV2ZW50Q2Fu
dmFzPQouX2VsZW0uYmluZCgibW91c2VlbnRlciIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlRW50
ZXIpO3RoaXMuZXZlbnRDYW52YXMuX2U9CmxlbS5iaW5kKCJtb3VzZWxlYXZlIix7cGxvdDp0aGlz
fSx0aGlzLm9uTW91c2VMZWF2ZSk7aWYodGhpcy5jYXB0dXJlUmlnaHRDbD0KaWNrKXt0aGlzLmV2
ZW50Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNldXAiLHtwbG90OnRoaXN9LHRoaXMub25SaWdodENs
aWNrKTt0PQpoaXMuZXZlbnRDYW52YXMuX2VsZW0uZ2V0KDApLm9uY29udGV4dG1lbnU9M0RmdW5j
dGlvbigpe3JldHVybiBmYWxzZX19ZWxzZXs9CnRoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgi
bW91c2V1cCIse3Bsb3Q6dGhpc30sdGhpcy5vbk1vdXNlVXApfX07ZnVuY3Rpbz0KbiBhaShhdil7
dmFyIGF1PTNEYXYuZGF0YS5wbG90O3ZhciBhcD0zRGF1LmV2ZW50Q2FudmFzLl9lbGVtLm9mZnNl
dCgpO3ZhciBhPQp0PTNEe3g6YXYucGFnZVgtYXAubGVmdCx5OmF2LnBhZ2VZLWFwLnRvcH07dmFy
IGFxPTNEe3hheGlzOm51bGwseWF4aXM6bnVsbCw9CngyYXhpczpudWxsLHkyYXhpczpudWxsLHkz
YXhpczpudWxsLHk0YXhpczpudWxsLHk1YXhpczpudWxsLHk2YXhpczpudWxsLHk3YT0KeGlzOm51
bGwseThheGlzOm51bGwseTlheGlzOm51bGwseU1pZEF4aXM6bnVsbH07dmFyIGFyPTNEWyJ4YXhp
cyIsInlheGlzIiwiPQp4MmF4aXMiLCJ5MmF4aXMiLCJ5M2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMi
LCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMiLCJ5OWE9CnhpcyIsInlNaWRBeGlzIl07dmFyIGFs
PTNEYXUuYXhlczt2YXIgYW0sYW87Zm9yKGFtPTNEMTE7YW0+MDthbS0tKXthbz0zRGFyWz0KYW0t
MV07aWYoYWxbYW9dLnNob3cpe2FxW2FvXT0zRGFsW2FvXS5zZXJpZXNfcDJ1KGF0W2FvLmNoYXJB
dCgwKV0pfX1yZXR1cm57PQpvZmZzZXRzOmFwLGdyaWRQb3M6YXQsZGF0YVBvczphcX19ZnVuY3Rp
b24gYWsoYWwsYW0pe3ZhciBhcT0zRGFtLnNlcmllczt2YXI9CiBhVyxhVSxhVCxhTyxhUCxhSixh
SSxhdyxhdSxheixhQSxhSzt2YXIgYVMsYVgsYVEsYXIsYUgsYU0sYVY7dmFyIGFuLGFOO2Zvcj0K
KGFUPTNEYW0uc2VyaWVzU3RhY2subGVuZ3RoLTE7YVQ+PTNEMDthVC0tKXthVz0zRGFtLnNlcmll
c1N0YWNrW2FUXTthTz0zRGFxPQpbYVddO2FWPTNEYU8uX2hpZ2hsaWdodFRocmVzaG9sZDtzd2l0
Y2goYU8ucmVuZGVyZXIuY29uc3RydWN0b3Ipe2Nhc2UgTC5qcXA9CmxvdC5CYXJSZW5kZXJlcjph
Sj0zRGFsLng7YUk9M0RhbC55O2ZvcihhVT0zRDA7YVU8YU8uX2JhclBvaW50cy5sZW5ndGg7YVUr
Kz0KKXthSD0zRGFPLl9iYXJQb2ludHNbYVVdO2FRPTNEYU8uZ3JpZERhdGFbYVVdO2lmKGFKPmFI
WzBdWzBdJiZhSjxhSFsyXVswXSYmPQphST5hSFsyXVsxXSYmYUk8YUhbMF1bMV0pe3JldHVybntz
ZXJpZXNJbmRleDphTy5pbmRleCxwb2ludEluZGV4OmFVLGdyaWREYXQ9CmE6YVEsZGF0YTphTy5k
YXRhW2FVXSxwb2ludHM6YU8uX2JhclBvaW50c1thVV19fX1icmVhaztjYXNlIEwuanFwbG90LlB5
cmFtaT0KZFJlbmRlcmVyOmFKPTNEYWwueDthST0zRGFsLnk7Zm9yKGFVPTNEMDthVTxhTy5fYmFy
UG9pbnRzLmxlbmd0aDthVSsrKXthSD0KPTNEYU8uX2JhclBvaW50c1thVV07YVE9M0RhTy5ncmlk
RGF0YVthVV07aWYoYUo+YUhbMF1bMF0rYVZbMF1bMF0mJmFKPGFIWzJdPQpbMF0rYVZbMl1bMF0m
JmFJPmFIWzJdWzFdJiZhSTxhSFswXVsxXSl7cmV0dXJue3Nlcmllc0luZGV4OmFPLmluZGV4LHBv
aW50SW49CmRleDphVSxncmlkRGF0YTphUSxkYXRhOmFPLmRhdGFbYVVdLHBvaW50czphTy5fYmFy
UG9pbnRzW2FVXX19fWJyZWFrO2Nhc2UgTD0KLmpxcGxvdC5Eb251dFJlbmRlcmVyOmF6PTNEYU8u
c3RhcnRBbmdsZS8xODAqTWF0aC5QSTthSj0zRGFsLngtYU8uX2NlbnRlclswPQpdO2FJPTNEYWwu
eS1hTy5fY2VudGVyWzFdO2FQPTNETWF0aC5zcXJ0KE1hdGgucG93KGFKLDIpK01hdGgucG93KGFJ
LDIpKTtpZig9CmFKPjAmJi1hST49M0QwKXthdz0zRDIqTWF0aC5QSS1NYXRoLmF0YW4oLWFJL2FK
KX1lbHNle2lmKGFKPjAmJi1hSTwwKXthdz0zRD0KLU1hdGguYXRhbigtYUkvYUopfWVsc2V7aWYo
YUo8MCl7YXc9M0RNYXRoLlBJLU1hdGguYXRhbigtYUkvYUopfWVsc2V7aWYoYUo9Cj0zRD0zRDAm
Ji1hST4wKXthdz0zRDMqTWF0aC5QSS8yfWVsc2V7aWYoYUo9M0Q9M0QwJiYtYUk8MCl7YXc9M0RN
YXRoLlBJLzJ9ZT0KbHNle2lmKGFKPTNEPTNEMCYmYUk9M0Q9M0QwKXthdz0zRDB9fX19fX1pZihh
eil7YXctPTNEYXo7aWYoYXc8MCl7YXcrPTNEMipNPQphdGguUEl9ZWxzZXtpZihhdz4yKk1hdGgu
UEkpe2F3LT0zRDIqTWF0aC5QSX19fWF1PTNEYU8uc2xpY2VNYXJnaW4vMTgwKk1hdGg9Ci5QSTtp
ZihhUDxhTy5fcmFkaXVzJiZhUD5hTy5faW5uZXJSYWRpdXMpe2ZvcihhVT0zRDA7YVU8YU8uZ3Jp
ZERhdGEubGVuZ3RoOz0KYVUrKyl7YUE9M0QoYVU+MCk/YU8uZ3JpZERhdGFbYVUtMV1bMV0rYXU6
YXU7YUs9M0RhTy5ncmlkRGF0YVthVV1bMV07aWYoYXc+PQphQSYmYXc8YUspe3JldHVybntzZXJp
ZXNJbmRleDphTy5pbmRleCxwb2ludEluZGV4OmFVLGdyaWREYXRhOlthbC54LGFsLnldLGQ9CmF0
YTphTy5kYXRhW2FVXX19fX1icmVhaztjYXNlIEwuanFwbG90LlBpZVJlbmRlcmVyOmF6PTNEYU8u
c3RhcnRBbmdsZS8xODAqTT0KYXRoLlBJO2FKPTNEYWwueC1hTy5fY2VudGVyWzBdO2FJPTNEYWwu
eS1hTy5fY2VudGVyWzFdO2FQPTNETWF0aC5zcXJ0KE1hdGguPQpwb3coYUosMikrTWF0aC5wb3co
YUksMikpO2lmKGFKPjAmJi1hST49M0QwKXthdz0zRDIqTWF0aC5QSS1NYXRoLmF0YW4oLWFJL2E9
CkopfWVsc2V7aWYoYUo+MCYmLWFJPDApe2F3PTNELU1hdGguYXRhbigtYUkvYUopfWVsc2V7aWYo
YUo8MCl7YXc9M0RNYXRoLlBJLT0KTWF0aC5hdGFuKC1hSS9hSil9ZWxzZXtpZihhSj0zRD0zRDAm
Ji1hST4wKXthdz0zRDMqTWF0aC5QSS8yfWVsc2V7aWYoYUo9M0Q9Cj0zRDAmJi1hSTwwKXthdz0z
RE1hdGguUEkvMn1lbHNle2lmKGFKPTNEPTNEMCYmYUk9M0Q9M0QwKXthdz0zRDB9fX19fX1pZihh
ej0KKXthdy09M0RhejtpZihhdzwwKXthdys9M0QyKk1hdGguUEl9ZWxzZXtpZihhdz4yKk1hdGgu
UEkpe2F3LT0zRDIqTWF0aC5QSX19PQp9YXU9M0RhTy5zbGljZU1hcmdpbi8xODAqTWF0aC5QSTtp
ZihhUDxhTy5fcmFkaXVzKXtmb3IoYVU9M0QwO2FVPGFPLmdyaWREYXQ9CmEubGVuZ3RoO2FVKysp
e2FBPTNEKGFVPjApP2FPLmdyaWREYXRhW2FVLTFdWzFdK2F1OmF1O2FLPTNEYU8uZ3JpZERhdGFb
YVVdWz0KMV07aWYoYXc+YUEmJmF3PGFLKXtyZXR1cm57c2VyaWVzSW5kZXg6YU8uaW5kZXgscG9p
bnRJbmRleDphVSxncmlkRGF0YTpbYWwuPQp4LGFsLnldLGRhdGE6YU8uZGF0YVthVV19fX19YnJl
YWs7Y2FzZSBMLmpxcGxvdC5CdWJibGVSZW5kZXJlcjphSj0zRGFsLng7YUk9Cj0zRGFsLnk7dmFy
IGFGPTNEbnVsbDtpZihhTy5zaG93KXtmb3IodmFyIGFVPTNEMDthVTxhTy5ncmlkRGF0YS5sZW5n
dGg7YVUrKz0KKXthUT0zRGFPLmdyaWREYXRhW2FVXTthWD0zRE1hdGguc3FydCgoYUotYVFbMF0p
KihhSi1hUVswXSkrKGFJLWFRWzFdKSooYUktPQphUVsxXSkpO2lmKGFYPD0zRGFRWzJdJiYoYVg8
PTNEYVN8fGFTPTNEPTNEbnVsbCkpe2FTPTNEYVg7YUY9M0R7c2VyaWVzSW5kZXg9CjphVyxwb2lu
dEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX1pZihhRiE9M0RudWxsKXty
ZXR1cm4gYUZ9fT0KYnJlYWs7Y2FzZSBMLmpxcGxvdC5GdW5uZWxSZW5kZXJlcjphSj0zRGFsLng7
YUk9M0RhbC55O3ZhciBhTD0zRGFPLl92ZXJ0aWNlPQpzLGFwPTNEYUxbMF0sYW89M0RhTFthTC5s
ZW5ndGgtMV0sYXQsYUUsYXk7ZnVuY3Rpb24gYVIoYTAsYTIsYTEpe3ZhciBhWj0zRCg9CmEyWzFd
LWExWzFdKS8oYTJbMF0tYTFbMF0pO3ZhciBhWT0zRGEyWzFdLWFaKmEyWzBdO3ZhciBhMz0zRGEw
K2EyWzFdO3JldHVybj0KWyhhMy1hWSkvYVosYTNdfWF0PTNEYVIoYUksYXBbMF0sYW9bM10pO2FF
PTNEYVIoYUksYXBbMV0sYW9bMl0pO2ZvcihhVT0zRDA7PQphVTxhTC5sZW5ndGg7YVUrKyl7YXk9
M0RhTFthVV07aWYoYUk+PTNEYXlbMF1bMV0mJmFJPD0zRGF5WzNdWzFdJiZhSj49M0RhdFs9CjBd
JiZhSjw9M0RhRVswXSl7cmV0dXJue3Nlcmllc0luZGV4OmFPLmluZGV4LHBvaW50SW5kZXg6YVUs
Z3JpZERhdGE6bnVsbCxkYT0KdGE6YU8uZGF0YVthVV19fX1icmVhaztjYXNlIEwuanFwbG90Lkxp
bmVSZW5kZXJlcjphSj0zRGFsLng7YUk9M0RhbC55O2FQPTNEPQphTy5yZW5kZXJlcjtpZihhTy5z
aG93KXtpZigoYU8uZmlsbHx8KGFPLnJlbmRlcmVyLmJhbmRzLnNob3cmJmFPLnJlbmRlcmVyLmI9
CmFuZHMuZmlsbCkpJiYoIWFtLnBsdWdpbnMuaGlnaGxpZ2h0ZXJ8fCFhbS5wbHVnaW5zLmhpZ2hs
aWdodGVyLnNob3cpKXt2YXIgYT0KeD0zRGZhbHNlO2lmKGFKPmFPLl9ib3VuZGluZ0JveFswXVsw
XSYmYUo8YU8uX2JvdW5kaW5nQm94WzFdWzBdJiZhST5hTy5fYm91PQpuZGluZ0JveFsxXVsxXSYm
YUk8YU8uX2JvdW5kaW5nQm94WzBdWzFdKXt2YXIgYUQ9M0RhTy5fYXJlYVBvaW50cy5sZW5ndGg7
dmE9CnIgYUc7dmFyIGFVPTNEYUQtMTtmb3IodmFyIGFHPTNEMDthRzxhRDthRysrKXt2YXIgYUM9
M0RbYU8uX2FyZWFQb2ludHNbYUddWz0KMF0sYU8uX2FyZWFQb2ludHNbYUddWzFdXTt2YXIgYUI9
M0RbYU8uX2FyZWFQb2ludHNbYVVdWzBdLGFPLl9hcmVhUG9pbnRzW2FVPQpdWzFdXTtpZihhQ1sx
XTxhSSYmYUJbMV0+PTNEYUl8fGFCWzFdPGFJJiZhQ1sxXT49M0RhSSl7aWYoYUNbMF0rKGFJLWFD
WzFdKS89CihhQlsxXS1hQ1sxXSkqKGFCWzBdLWFDWzBdKTxhSil7YXg9M0QhYXh9fWFVPTNEYUd9
fWlmKGF4KXtyZXR1cm57c2VyaWVzSW5kZT0KeDphVyxwb2ludEluZGV4Om51bGwsZ3JpZERhdGE6
YU8uZ3JpZERhdGEsZGF0YTphTy5kYXRhLHBvaW50czphTy5fYXJlYVBvaW50PQpzfX1icmVha31l
bHNle2FOPTNEYU8ubWFya2VyUmVuZGVyZXIuc2l6ZS8yK2FPLm5laWdoYm9yVGhyZXNob2xkO2Fu
PTNEKGFOPjA9Cik/YU46MDtmb3IodmFyIGFVPTNEMDthVTxhTy5ncmlkRGF0YS5sZW5ndGg7YVUr
Kyl7YVE9M0RhTy5ncmlkRGF0YVthVV07aWYoYT0KUC5jb25zdHJ1Y3Rvcj0zRD0zREwuanFwbG90
Lk9ITENSZW5kZXJlcil7aWYoYVAuY2FuZGxlU3RpY2spe3ZhciBhdj0zRGFPLl95PQpheGlzLnNl
cmllc191MnA7aWYoYUo+PTNEYVFbMF0tYVAuX2JvZHlXaWR0aC8yJiZhSjw9M0RhUVswXSthUC5f
Ym9keVdpZHRoLzI9CiYmYUk+PTNEYXYoYU8uZGF0YVthVV1bMl0pJiZhSTw9M0RhdihhTy5kYXRh
W2FVXVszXSkpe3JldHVybntzZXJpZXNJbmRleDphVz0KLHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6
YVEsZGF0YTphTy5kYXRhW2FVXX19fWVsc2V7aWYoIWFQLmhsYyl7dmFyIGF2PTNEYU8uPQpfeWF4
aXMuc2VyaWVzX3UycDtpZihhSj49M0RhUVswXS1hUC5fdGlja0xlbmd0aCYmYUo8PTNEYVFbMF0r
YVAuX3RpY2tMZW5ndGg9CiYmYUk+PTNEYXYoYU8uZGF0YVthVV1bMl0pJiZhSTw9M0RhdihhTy5k
YXRhW2FVXVszXSkpe3JldHVybntzZXJpZXNJbmRleDphVz0KLHBvaW50SW5kZXg6YVUsZ3JpZERh
dGE6YVEsZGF0YTphTy5kYXRhW2FVXX19fWVsc2V7dmFyIGF2PTNEYU8uX3lheGlzLnNlcmllPQpz
X3UycDtpZihhSj49M0RhUVswXS1hUC5fdGlja0xlbmd0aCYmYUo8PTNEYVFbMF0rYVAuX3RpY2tM
ZW5ndGgmJmFJPj0zRGF2KGE9Ck8uZGF0YVthVV1bMV0pJiZhSTw9M0RhdihhTy5kYXRhW2FVXVsy
XSkpe3JldHVybntzZXJpZXNJbmRleDphVyxwb2ludEluZGV4Oj0KYVUsZ3JpZERhdGE6YVEsZGF0
YTphTy5kYXRhW2FVXX19fX19ZWxzZXtpZihhUVswXSE9M0RudWxsJiZhUVsxXSE9M0RudWxsKXth
PQpYPTNETWF0aC5zcXJ0KChhSi1hUVswXSkqKGFKLWFRWzBdKSsoYUktYVFbMV0pKihhSS1hUVsx
XSkpO2lmKGFYPD0zRGFuJiYoYVg9Cjw9M0RhU3x8YVM9M0Q9M0RudWxsKSl7YVM9M0RhWDtyZXR1
cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleDphVSxncmlkRGF0YT0KOmFRLGRhdGE6YU8uZGF0
YVthVV19fX19fX19YnJlYWs7ZGVmYXVsdDphSj0zRGFsLng7YUk9M0RhbC55O2FQPTNEYU8ucmVu
ZGVyPQplcjtpZihhTy5zaG93KXthTj0zRGFPLm1hcmtlclJlbmRlcmVyLnNpemUvMithTy5uZWln
aGJvclRocmVzaG9sZDthbj0zRChhTj49CjApP2FOOjA7Zm9yKHZhciBhVT0zRDA7YVU8YU8uZ3Jp
ZERhdGEubGVuZ3RoO2FVKyspe2FRPTNEYU8uZ3JpZERhdGFbYVVdO2lmKD0KYVAuY29uc3RydWN0
b3I9M0Q9M0RMLmpxcGxvdC5PSExDUmVuZGVyZXIpe2lmKGFQLmNhbmRsZVN0aWNrKXt2YXIgYXY9
M0RhTy5fPQp5YXhpcy5zZXJpZXNfdTJwO2lmKGFKPj0zRGFRWzBdLWFQLl9ib2R5V2lkdGgvMiYm
YUo8PTNEYVFbMF0rYVAuX2JvZHlXaWR0aC89CjImJmFJPj0zRGF2KGFPLmRhdGFbYVVdWzJdKSYm
YUk8PTNEYXYoYU8uZGF0YVthVV1bM10pKXtyZXR1cm57c2VyaWVzSW5kZXg6YT0KVyxwb2ludElu
ZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX1lbHNle2lmKCFhUC5obGMpe3Zh
ciBhdj0zRGFPPQouX3lheGlzLnNlcmllc191MnA7aWYoYUo+PTNEYVFbMF0tYVAuX3RpY2tMZW5n
dGgmJmFKPD0zRGFRWzBdK2FQLl90aWNrTGVuZ3Q9CmgmJmFJPj0zRGF2KGFPLmRhdGFbYVVdWzJd
KSYmYUk8PTNEYXYoYU8uZGF0YVthVV1bM10pKXtyZXR1cm57c2VyaWVzSW5kZXg6YT0KVyxwb2lu
dEluZGV4OmFVLGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX1lbHNle3ZhciBhdj0zRGFP
Ll95YXhpcy5zZXJpPQplc191MnA7aWYoYUo+PTNEYVFbMF0tYVAuX3RpY2tMZW5ndGgmJmFKPD0z
RGFRWzBdK2FQLl90aWNrTGVuZ3RoJiZhST49M0Rhdig9CmFPLmRhdGFbYVVdWzFdKSYmYUk8PTNE
YXYoYU8uZGF0YVthVV1bMl0pKXtyZXR1cm57c2VyaWVzSW5kZXg6YVcscG9pbnRJbmRleD0KOmFV
LGdyaWREYXRhOmFRLGRhdGE6YU8uZGF0YVthVV19fX19fWVsc2V7YVg9M0RNYXRoLnNxcnQoKGFK
LWFRWzBdKSooYUotYVFbPQowXSkrKGFJLWFRWzFdKSooYUktYVFbMV0pKTtpZihhWDw9M0RhbiYm
KGFYPD0zRGFTfHxhUz0zRD0zRG51bGwpKXthUz0zRGFYO3I9CmV0dXJue3Nlcmllc0luZGV4OmFX
LHBvaW50SW5kZXg6YVUsZ3JpZERhdGE6YVEsZGF0YTphTy5kYXRhW2FVXX19fX19YnJlYWt9fT0K
cmV0dXJuIG51bGx9dGhpcy5vbkNsaWNrPTNEZnVuY3Rpb24oYW4pe3ZhciBhbT0zRGFpKGFuKTt2
YXIgYXA9M0Rhbi5kYXRhLnBsPQpvdDt2YXIgYW89M0RhayhhbS5ncmlkUG9zLGFwKTt2YXIgYWw9
M0RMLkV2ZW50KCJqcXBsb3RDbGljayIpO2FsLnBhZ2VYPTNEYW49Ci5wYWdlWDthbC5wYWdlWT0z
RGFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLGFvLGFw
XT0KKX07dGhpcy5vbkRibENsaWNrPTNEZnVuY3Rpb24oYW4pe3ZhciBhbT0zRGFpKGFuKTt2YXIg
YXA9M0Rhbi5kYXRhLnBsb3Q7dmFyPQogYW89M0RhayhhbS5ncmlkUG9zLGFwKTt2YXIgYWw9M0RM
LkV2ZW50KCJqcXBsb3REYmxDbGljayIpO2FsLnBhZ2VYPTNEYW4ucGE9CmdlWDthbC5wYWdlWT0z
RGFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLGFvLGFw
XSl9Oz0KdGhpcy5vbk1vdXNlRG93bj0zRGZ1bmN0aW9uKGFuKXt2YXIgYW09M0RhaShhbik7dmFy
IGFwPTNEYW4uZGF0YS5wbG90O3ZhciBhPQpvPTNEYWsoYW0uZ3JpZFBvcyxhcCk7dmFyIGFsPTNE
TC5FdmVudCgianFwbG90TW91c2VEb3duIik7YWwucGFnZVg9M0Rhbi5wYWc9CmVYO2FsLnBhZ2VZ
PTNEYW4ucGFnZVk7TCh0aGlzKS50cmlnZ2VyKGFsLFthbS5ncmlkUG9zLGFtLmRhdGFQb3MsYW8s
YXBdKX07dD0KaGlzLm9uTW91c2VVcD0zRGZ1bmN0aW9uKGFuKXt2YXIgYW09M0RhaShhbik7dmFy
IGFsPTNETC5FdmVudCgianFwbG90TW91c2VVPQpwIik7YWwucGFnZVg9M0Rhbi5wYWdlWDthbC5w
YWdlWT0zRGFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyw9CmFtLmRhdGFQ
b3MsbnVsbCxhbi5kYXRhLnBsb3RdKX07dGhpcy5vblJpZ2h0Q2xpY2s9M0RmdW5jdGlvbihhbil7
dmFyIGFtPTNEYT0KaShhbik7dmFyIGFwPTNEYW4uZGF0YS5wbG90O3ZhciBhbz0zRGFrKGFtLmdy
aWRQb3MsYXApO2lmKGFwLmNhcHR1cmVSaWdodENsPQppY2spe2lmKGFuLndoaWNoPTNEPTNEMyl7
dmFyIGFsPTNETC5FdmVudCgianFwbG90UmlnaHRDbGljayIpO2FsLnBhZ2VYPTNEYW49Ci5wYWdl
WDthbC5wYWdlWT0zRGFuLnBhZ2VZO0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5k
YXRhUG9zLGFvLGFwXT0KKX1lbHNle3ZhciBhbD0zREwuRXZlbnQoImpxcGxvdE1vdXNlVXAiKTth
bC5wYWdlWD0zRGFuLnBhZ2VYO2FsLnBhZ2VZPTNEYW4uPQpwYWdlWTtMKHRoaXMpLnRyaWdnZXIo
YWwsW2FtLmdyaWRQb3MsYW0uZGF0YVBvcyxhbyxhcF0pfX19O3RoaXMub25Nb3VzZU1vdmU9Cj0z
RGZ1bmN0aW9uKGFuKXt2YXIgYW09M0RhaShhbik7dmFyIGFwPTNEYW4uZGF0YS5wbG90O3ZhciBh
bz0zRGFrKGFtLmdyaWRQbz0KcyxhcCk7dmFyIGFsPTNETC5FdmVudCgianFwbG90TW91c2VNb3Zl
Iik7YWwucGFnZVg9M0Rhbi5wYWdlWDthbC5wYWdlWT0zRGFuPQoucGFnZVk7TCh0aGlzKS50cmln
Z2VyKGFsLFthbS5ncmlkUG9zLGFtLmRhdGFQb3MsYW8sYXBdKX07dGhpcy5vbk1vdXNlRW50ZXI9
Cj0zRGZ1bmN0aW9uKGFuKXt2YXIgYW09M0RhaShhbik7dmFyIGFvPTNEYW4uZGF0YS5wbG90O3Zh
ciBhbD0zREwuRXZlbnQoImpxcD0KbG90TW91c2VFbnRlciIpO2FsLnBhZ2VYPTNEYW4ucGFnZVg7
YWwucGFnZVk9M0Rhbi5wYWdlWTthbC5yZWxhdGVkVGFyZ2V0PTNEPQphbi5yZWxhdGVkVGFyZ2V0
O0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9zLG51bGwsYW9dKX07dGhp
cy49Cm9uTW91c2VMZWF2ZT0zRGZ1bmN0aW9uKGFuKXt2YXIgYW09M0RhaShhbik7dmFyIGFvPTNE
YW4uZGF0YS5wbG90O3ZhciBhbD0zRD0KTC5FdmVudCgianFwbG90TW91c2VMZWF2ZSIpO2FsLnBh
Z2VYPTNEYW4ucGFnZVg7YWwucGFnZVk9M0Rhbi5wYWdlWTthbC5yZWxhPQp0ZWRUYXJnZXQ9M0Rh
bi5yZWxhdGVkVGFyZ2V0O0wodGhpcykudHJpZ2dlcihhbCxbYW0uZ3JpZFBvcyxhbS5kYXRhUG9z
LG51bGw9Cixhb10pfTt0aGlzLmRyYXdTZXJpZXM9M0RmdW5jdGlvbihhbixhbCl7dmFyIGFwLGFv
LGFtO2FsPTNEKHR5cGVvZihhbik9M0Q9Cj0zRD0zRCJudW1iZXIiJiZhbD0zRD0zRG51bGwpP2Fu
OmFsO2FuPTNEKHR5cGVvZihhbik9M0Q9M0Q9M0Qib2JqZWN0Iik/YW46ez0KfTtpZihhbCE9M0R1
KXthbz0zRHRoaXMuc2VyaWVzW2FsXTthbT0zRGFvLnNoYWRvd0NhbnZhcy5fY3R4O2FtLmNsZWFy
UmVjdCgwPQosMCxhbS5jYW52YXMud2lkdGgsYW0uY2FudmFzLmhlaWdodCk7YW8uZHJhd1NoYWRv
dyhhbSxhbix0aGlzKTthbT0zRGFvLmNhbnY9CmFzLl9jdHg7YW0uY2xlYXJSZWN0KDAsMCxhbS5j
YW52YXMud2lkdGgsYW0uY2FudmFzLmhlaWdodCk7YW8uZHJhdyhhbSxhbix0aD0KaXMpO2lmKGFv
LnJlbmRlcmVyLmNvbnN0cnVjdG9yPTNEPTNETC5qcXBsb3QuQmV6aWVyQ3VydmVSZW5kZXJlcil7
aWYoYWw8dGhpPQpzLnNlcmllcy5sZW5ndGgtMSl7dGhpcy5kcmF3U2VyaWVzKGFsKzEpfX19ZWxz
ZXtmb3IoYXA9M0QwO2FwPHRoaXMuc2VyaWVzLmw9CmVuZ3RoO2FwKyspe2FvPTNEdGhpcy5zZXJp
ZXNbYXBdO2FtPTNEYW8uc2hhZG93Q2FudmFzLl9jdHg7YW0uY2xlYXJSZWN0KDAsMD0KLGFtLmNh
bnZhcy53aWR0aCxhbS5jYW52YXMuaGVpZ2h0KTthby5kcmF3U2hhZG93KGFtLGFuLHRoaXMpO2Ft
PTNEYW8uY2FudmFzPQouX2N0eDthbS5jbGVhclJlY3QoMCwwLGFtLmNhbnZhcy53aWR0aCxhbS5j
YW52YXMuaGVpZ2h0KTthby5kcmF3KGFtLGFuLHRoaXM9Cil9fWFuPTNEYWw9M0RhcD0zRGFvPTNE
YW09M0RudWxsfTt0aGlzLm1vdmVTZXJpZXNUb0Zyb250PTNEZnVuY3Rpb24oYW0pe2FtPQo9M0Rw
YXJzZUludChhbSwxMCk7dmFyIGFwPTNETC5pbkFycmF5KGFtLHRoaXMuc2VyaWVzU3RhY2spO2lm
KGFwPTNEPTNELTEpe3I9CmV0dXJufWlmKGFwPTNEPTNEdGhpcy5zZXJpZXNTdGFjay5sZW5ndGgt
MSl7dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrPTNEdGhpcz0KLnNlcmllc1N0YWNrLnNsaWNlKDAp
O3JldHVybn12YXIgYWw9M0R0aGlzLnNlcmllc1N0YWNrW3RoaXMuc2VyaWVzU3RhY2subGVuPQpn
dGgtMV07dmFyIGFvPTNEdGhpcy5zZXJpZXNbYW1dLmNhbnZhcy5fZWxlbS5kZXRhY2goKTt2YXIg
YW49M0R0aGlzLnNlcmllc1s9CmFtXS5zaGFkb3dDYW52YXMuX2VsZW0uZGV0YWNoKCk7dGhpcy5z
ZXJpZXNbYWxdLnNoYWRvd0NhbnZhcy5fZWxlbS5hZnRlcihhbj0KKTt0aGlzLnNlcmllc1thbF0u
Y2FudmFzLl9lbGVtLmFmdGVyKGFvKTt0aGlzLnByZXZpb3VzU2VyaWVzU3RhY2s9M0R0aGlzLnNl
PQpyaWVzU3RhY2suc2xpY2UoMCk7dGhpcy5zZXJpZXNTdGFjay5zcGxpY2UoYXAsMSk7dGhpcy5z
ZXJpZXNTdGFjay5wdXNoKGFtKX09Cjt0aGlzLm1vdmVTZXJpZXNUb0JhY2s9M0RmdW5jdGlvbihh
bSl7YW09M0RwYXJzZUludChhbSwxMCk7dmFyIGFwPTNETC5pbkFycj0KYXkoYW0sdGhpcy5zZXJp
ZXNTdGFjayk7aWYoYXA9M0Q9M0QwfHxhcD0zRD0zRC0xKXtyZXR1cm59dmFyIGFsPTNEdGhpcy5z
ZXJpPQplc1N0YWNrWzBdO3ZhciBhbz0zRHRoaXMuc2VyaWVzW2FtXS5jYW52YXMuX2VsZW0uZGV0
YWNoKCk7dmFyIGFuPTNEdGhpcy5zZXI9Cmllc1thbV0uc2hhZG93Q2FudmFzLl9lbGVtLmRldGFj
aCgpO3RoaXMuc2VyaWVzW2FsXS5zaGFkb3dDYW52YXMuX2VsZW0uYmVmbz0KcmUoYW4pO3RoaXMu
c2VyaWVzW2FsXS5jYW52YXMuX2VsZW0uYmVmb3JlKGFvKTt0aGlzLnByZXZpb3VzU2VyaWVzU3Rh
Y2s9M0R0PQpoaXMuc2VyaWVzU3RhY2suc2xpY2UoMCk7dGhpcy5zZXJpZXNTdGFjay5zcGxpY2Uo
YXAsMSk7dGhpcy5zZXJpZXNTdGFjay51bnM9CmhpZnQoYW0pfTt0aGlzLnJlc3RvcmVQcmV2aW91
c1Nlcmllc09yZGVyPTNEZnVuY3Rpb24oKXt2YXIgYXIsYXEsYXAsYW8sYW4sYT0KbCxhbTtpZih0
aGlzLnNlcmllc1N0YWNrPTNEPTNEdGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrKXtyZXR1cm59Zm9y
KGFyPTNEMTthPQpyPHRoaXMucHJldmlvdXNTZXJpZXNTdGFjay5sZW5ndGg7YXIrKyl7YWw9M0R0
aGlzLnByZXZpb3VzU2VyaWVzU3RhY2tbYXJdO2E9Cm09M0R0aGlzLnByZXZpb3VzU2VyaWVzU3Rh
Y2tbYXItMV07YXA9M0R0aGlzLnNlcmllc1thbF0uY2FudmFzLl9lbGVtLmRldGFjaD0KKCk7YW89
M0R0aGlzLnNlcmllc1thbF0uc2hhZG93Q2FudmFzLl9lbGVtLmRldGFjaCgpO3RoaXMuc2VyaWVz
W2FtXS5zaGFkb3dDPQphbnZhcy5fZWxlbS5hZnRlcihhbyk7dGhpcy5zZXJpZXNbYW1dLmNhbnZh
cy5fZWxlbS5hZnRlcihhcCl9YW49M0R0aGlzLnNlcmk9CmVzU3RhY2suc2xpY2UoMCk7dGhpcy5z
ZXJpZXNTdGFjaz0zRHRoaXMucHJldmlvdXNTZXJpZXNTdGFjay5zbGljZSgwKTt0aGlzLj0KcHJl
dmlvdXNTZXJpZXNTdGFjaz0zRGFufTt0aGlzLnJlc3RvcmVPcmlnaW5hbFNlcmllc09yZGVyPTNE
ZnVuY3Rpb24oKXt2YXIgPQphcCxhbyxhbD0zRFtdLGFuLGFtO2ZvcihhcD0zRDA7YXA8dGhpcy5z
ZXJpZXMubGVuZ3RoO2FwKyspe2FsLnB1c2goYXApfWlmKHQ9Cmhpcy5zZXJpZXNTdGFjaz0zRD0z
RGFsKXtyZXR1cm59dGhpcy5wcmV2aW91c1Nlcmllc1N0YWNrPTNEdGhpcy5zZXJpZXNTdGFjaz0K
LnNsaWNlKDApO3RoaXMuc2VyaWVzU3RhY2s9M0RhbDtmb3IoYXA9M0QxO2FwPHRoaXMuc2VyaWVz
U3RhY2subGVuZ3RoO2FwKyspPQp7YW49M0R0aGlzLnNlcmllc1thcF0uY2FudmFzLl9lbGVtLmRl
dGFjaCgpO2FtPTNEdGhpcy5zZXJpZXNbYXBdLnNoYWRvd0NhbnY9CmFzLl9lbGVtLmRldGFjaCgp
O3RoaXMuc2VyaWVzW2FwLTFdLnNoYWRvd0NhbnZhcy5fZWxlbS5hZnRlcihhbSk7dGhpcy5zZXJp
ZT0Kc1thcC0xXS5jYW52YXMuX2VsZW0uYWZ0ZXIoYW4pfX07dGhpcy5hY3RpdmF0ZVRoZW1lPTNE
ZnVuY3Rpb24oYWwpe3RoaXMudGhlPQptZUVuZ2luZS5hY3RpdmF0ZSh0aGlzLGFsKX19TC5qcXBs
b3QuY29tcHV0ZUhpZ2hsaWdodENvbG9ycz0zRGZ1bmN0aW9uKGFpKXs9CnZhciBhaztpZihMLmlz
QXJyYXkoYWkpKXthaz0zRFtdO2Zvcih2YXIgYW09M0QwO2FtPGFpLmxlbmd0aDthbSsrKXt2YXIg
YWw9Cj0zREwuanFwbG90LmdldENvbG9yQ29tcG9uZW50cyhhaVthbV0pO3ZhciBhaD0zRFthbFsw
XSxhbFsxXSxhbFsyXV07dmFyIGFuPQo9M0RhaFswXSthaFsxXSthaFsyXTtmb3IodmFyIGFqPTNE
MDthajwzO2FqKyspe2FoW2FqXT0zRChhbj42NjApP2FoW2FqXSowLjg9CjU6MC43MyphaFthal0r
OTA7YWhbYWpdPTNEcGFyc2VJbnQoYWhbYWpdLDEwKTsoYWhbYWpdPjI1NSk/MjU1OmFoW2FqXX1h
aFszXT0KPTNEMC4zKzAuMzUqYWxbM107YWsucHVzaCgicmdiYSgiK2FoWzBdKyIsIithaFsxXSsi
LCIrYWhbMl0rIiwiK2FoWzNdKyIpIil9PQp9ZWxzZXt2YXIgYWw9M0RMLmpxcGxvdC5nZXRDb2xv
ckNvbXBvbmVudHMoYWkpO3ZhciBhaD0zRFthbFswXSxhbFsxXSxhbFsyXV09Cjt2YXIgYW49M0Rh
aFswXSthaFsxXSthaFsyXTtmb3IodmFyIGFqPTNEMDthajwzO2FqKyspe2FoW2FqXT0zRChhbj42
NjApP2FoWz0KYWpdKjAuODU6MC43MyphaFthal0rOTA7YWhbYWpdPTNEcGFyc2VJbnQoYWhbYWpd
LDEwKTsoYWhbYWpdPjI1NSk/MjU1OmFoW2FqPQpdfWFoWzNdPTNEMC4zKzAuMzUqYWxbM107YWs9
M0QicmdiYSgiK2FoWzBdKyIsIithaFsxXSsiLCIrYWhbMl0rIiwiK2FoWzNdKyI9CikifXJldHVy
biBha307TC5qcXBsb3QuQ29sb3JHZW5lcmF0b3I9M0RmdW5jdGlvbihhaSl7YWk9M0RhaXx8TC5q
cXBsb3QuY29uZj0KaWcuZGVmYXVsdENvbG9yczt2YXIgYWg9M0QwO3RoaXMubmV4dD0zRGZ1bmN0
aW9uKCl7aWYoYWg8YWkubGVuZ3RoKXtyZXR1cm4gPQphaVthaCsrXX1lbHNle2FoPTNEMDtyZXR1
cm4gYWlbYWgrK119fTt0aGlzLnByZXZpb3VzPTNEZnVuY3Rpb24oKXtpZihhaD4wKXs9CnJldHVy
biBhaVthaC0tXX1lbHNle2FoPTNEYWkubGVuZ3RoLTE7cmV0dXJuIGFpW2FoXX19O3RoaXMuZ2V0
PTNEZnVuY3Rpb24oYT0Kayl7dmFyIGFqPTNEYWstYWkubGVuZ3RoKk1hdGguZmxvb3IoYWsvYWku
bGVuZ3RoKTtyZXR1cm4gYWlbYWpdfTt0aGlzLnNldENvPQpsb3JzPTNEZnVuY3Rpb24oYWope2Fp
PTNEYWp9O3RoaXMucmVzZXQ9M0RmdW5jdGlvbigpe2FoPTNEMH07dGhpcy5nZXRJbmRleD0KPTNE
ZnVuY3Rpb24oKXtyZXR1cm4gYWh9O3RoaXMuc2V0SW5kZXg9M0RmdW5jdGlvbihhail7YWg9M0Rh
an19O0wuanFwbG90LmhlPQp4MnJnYj0zRGZ1bmN0aW9uKGFqLGFoKXthaj0zRGFqLnJlcGxhY2Uo
IiMiLCIiKTtpZihhai5sZW5ndGg9M0Q9M0QzKXthaj0zRGE9CmouY2hhckF0KDApK2FqLmNoYXJB
dCgwKSthai5jaGFyQXQoMSkrYWouY2hhckF0KDEpK2FqLmNoYXJBdCgyKSthai5jaGFyQXQoMj0K
KX12YXIgYWk7YWk9M0QicmdiYSgiK3BhcnNlSW50KGFqLnNsaWNlKDAsMiksMTYpKyIsICIrcGFy
c2VJbnQoYWouc2xpY2UoMiw0PQopLDE2KSsiLCAiK3BhcnNlSW50KGFqLnNsaWNlKDQsNiksMTYp
O2lmKGFoKXthaSs9M0QiLCAiK2FofWFpKz0zRCIpIjtyZXR1cm49CiBhaX07TC5qcXBsb3Qucmdi
MmhleD0zRGZ1bmN0aW9uKGFtKXt2YXIgYWo9M0QvcmdiYT9cKCAqKFswLTldezEsM31cLj9bMC05
XT0KKiU/KSAqLCAqKFswLTldezEsM31cLj9bMC05XSolPykgKiwgKihbMC05XXsxLDN9XC4/WzAt
OV0qJT8pICooPzosICpbMC05Ll0qPQopP1wpLzt2YXIgYWg9M0RhbS5tYXRjaChhaik7dmFyIGFs
PTNEIiMiO2Zvcih2YXIgYWs9M0QxO2FrPDQ7YWsrKyl7dmFyIGFpO2k9CmYoYWhbYWtdLnNlYXJj
aCgvJS8pIT0zRC0xKXthaT0zRHBhcnNlSW50KDI1NSphaFtha10vMTAwLDEwKS50b1N0cmluZygx
Nik7aT0KZihhaS5sZW5ndGg9M0Q9M0QxKXthaT0zRCIwIithaX19ZWxzZXthaT0zRHBhcnNlSW50
KGFoW2FrXSwxMCkudG9TdHJpbmcoMTYpPQo7aWYoYWkubGVuZ3RoPTNEPTNEMSl7YWk9M0QiMCIr
YWl9fWFsKz0zRGFpfXJldHVybiBhbH07TC5qcXBsb3Qubm9ybWFsaXplMnI9CmdiPTNEZnVuY3Rp
b24oYWksYWgpe2lmKGFpLnNlYXJjaCgvXiAqcmdiYT9cKC8pIT0zRC0xKXtyZXR1cm4gYWl9ZWxz
ZXtpZihhaT0KLnNlYXJjaCgvXiAqIz9bMC05YS1mQS1GXT9bMC05YS1mQS1GXS8pIT0zRC0xKXty
ZXR1cm4gTC5qcXBsb3QuaGV4MnJnYihhaSxhPQpoKX1lbHNle3Rocm93IG5ldyBFcnJvcigiSW52
YWxpZCBjb2xvciBzcGVjIil9fX07TC5qcXBsb3QuZ2V0Q29sb3JDb21wb25lbnQ9CnM9M0RmdW5j
dGlvbihhbSl7YW09M0RMLmpxcGxvdC5jb2xvcktleXdvcmRNYXBbYW1dfHxhbTt2YXIgYWs9M0RM
LmpxcGxvdC5ubz0Kcm1hbGl6ZTJyZ2IoYW0pO3ZhciBhaj0zRC9yZ2JhP1woICooWzAtOV17MSwz
fVwuP1swLTldKiU/KSAqLCAqKFswLTldezEsM31cPQouP1swLTldKiU/KSAqLCAqKFswLTldezEs
M31cLj9bMC05XSolPykgKiw/ICooWzAtOS5dKiAqKT9cKS87dmFyIGFoPTNEYWsubWE9CnRjaChh
aik7dmFyIGFpPTNEW107Zm9yKHZhciBhbD0zRDE7YWw8NDthbCsrKXtpZihhaFthbF0uc2VhcmNo
KC8lLykhPTNELTEpez0KYWlbYWwtMV09M0RwYXJzZUludCgyNTUqYWhbYWxdLzEwMCwxMCl9ZWxz
ZXthaVthbC0xXT0zRHBhcnNlSW50KGFoW2FsXSwxMCl9PQp9YWlbM109M0RwYXJzZUZsb2F0KGFo
WzRdKT9wYXJzZUZsb2F0KGFoWzRdKToxO3JldHVybiBhaX07TC5qcXBsb3QuY29sb3JLZXk9Cndv
cmRNYXA9M0R7YWxpY2VibHVlOiJyZ2IoMjQwLCAyNDgsIDI1NSkiLGFudGlxdWV3aGl0ZToicmdi
KDI1MCwgMjM1LCAyMTUpIj0KLGFxdWE6InJnYiggMCwgMjU1LCAyNTUpIixhcXVhbWFyaW5lOiJy
Z2IoMTI3LCAyNTUsIDIxMikiLGF6dXJlOiJyZ2IoMjQwLCAyPQo1NSwgMjU1KSIsYmVpZ2U6InJn
YigyNDUsIDI0NSwgMjIwKSIsYmlzcXVlOiJyZ2IoMjU1LCAyMjgsIDE5NikiLGJsYWNrOiJyZ2I9
CiggMCwgMCwgMCkiLGJsYW5jaGVkYWxtb25kOiJyZ2IoMjU1LCAyMzUsIDIwNSkiLGJsdWU6InJn
YiggMCwgMCwgMjU1KSIsYmx1ZT0KdmlvbGV0OiJyZ2IoMTM4LCA0MywgMjI2KSIsYnJvd246InJn
YigxNjUsIDQyLCA0MikiLGJ1cmx5d29vZDoicmdiKDIyMiwgMTg0PQosIDEzNSkiLGNhZGV0Ymx1
ZToicmdiKCA5NSwgMTU4LCAxNjApIixjaGFydHJldXNlOiJyZ2IoMTI3LCAyNTUsIDApIixjaG9j
b2w9CmF0ZToicmdiKDIxMCwgMTA1LCAzMCkiLGNvcmFsOiJyZ2IoMjU1LCAxMjcsIDgwKSIsY29y
bmZsb3dlcmJsdWU6InJnYigxMDAsID0KMTQ5LCAyMzcpIixjb3Juc2lsazoicmdiKDI1NSwgMjQ4
LCAyMjApIixjcmltc29uOiJyZ2IoMjIwLCAyMCwgNjApIixjeWFuOiJyPQpnYiggMCwgMjU1LCAy
NTUpIixkYXJrYmx1ZToicmdiKCAwLCAwLCAxMzkpIixkYXJrY3lhbjoicmdiKCAwLCAxMzksIDEz
OSkiLGQ9CmFya2dvbGRlbnJvZDoicmdiKDE4NCwgMTM0LCAxMSkiLGRhcmtncmF5OiJyZ2IoMTY5
LCAxNjksIDE2OSkiLGRhcmtncmVlbjoicj0KZ2IoIDAsIDEwMCwgMCkiLGRhcmtncmV5OiJyZ2Io
MTY5LCAxNjksIDE2OSkiLGRhcmtraGFraToicmdiKDE4OSwgMTgzLCAxMDcpPQoiLGRhcmttYWdl
bnRhOiJyZ2IoMTM5LCAwLCAxMzkpIixkYXJrb2xpdmVncmVlbjoicmdiKCA4NSwgMTA3LCA0Nyki
LGRhcmtvcmE9Cm5nZToicmdiKDI1NSwgMTQwLCAwKSIsZGFya29yY2hpZDoicmdiKDE1MywgNTAs
IDIwNCkiLGRhcmtyZWQ6InJnYigxMzksIDAsID0KMCkiLGRhcmtzYWxtb246InJnYigyMzMsIDE1
MCwgMTIyKSIsZGFya3NlYWdyZWVuOiJyZ2IoMTQzLCAxODgsIDE0MykiLGRhcmtzPQpsYXRlYmx1
ZToicmdiKCA3MiwgNjEsIDEzOSkiLGRhcmtzbGF0ZWdyYXk6InJnYiggNDcsIDc5LCA3OSkiLGRh
cmtzbGF0ZWdyZXk9CjoicmdiKCA0NywgNzksIDc5KSIsZGFya3R1cnF1b2lzZToicmdiKCAwLCAy
MDYsIDIwOSkiLGRhcmt2aW9sZXQ6InJnYigxNDgsID0KMCwgMjExKSIsZGVlcHBpbms6InJnYigy
NTUsIDIwLCAxNDcpIixkZWVwc2t5Ymx1ZToicmdiKCAwLCAxOTEsIDI1NSkiLGRpbWdyPQpheToi
cmdiKDEwNSwgMTA1LCAxMDUpIixkaW1ncmV5OiJyZ2IoMTA1LCAxMDUsIDEwNSkiLGRvZGdlcmJs
dWU6InJnYiggMzAsIDE9CjQ0LCAyNTUpIixmaXJlYnJpY2s6InJnYigxNzgsIDM0LCAzNCkiLGZs
b3JhbHdoaXRlOiJyZ2IoMjU1LCAyNTAsIDI0MCkiLGZvcj0KZXN0Z3JlZW46InJnYiggMzQsIDEz
OSwgMzQpIixmdWNoc2lhOiJyZ2IoMjU1LCAwLCAyNTUpIixnYWluc2Jvcm86InJnYigyMjAsPQog
MjIwLCAyMjApIixnaG9zdHdoaXRlOiJyZ2IoMjQ4LCAyNDgsIDI1NSkiLGdvbGQ6InJnYigyNTUs
IDIxNSwgMCkiLGdvbGRlbnI9Cm9kOiJyZ2IoMjE4LCAxNjUsIDMyKSIsZ3JheToicmdiKDEyOCwg
MTI4LCAxMjgpIixncmV5OiJyZ2IoMTI4LCAxMjgsIDEyOCkiLD0KZ3JlZW46InJnYiggMCwgMTI4
LCAwKSIsZ3JlZW55ZWxsb3c6InJnYigxNzMsIDI1NSwgNDcpIixob25leWRldzoicmdiKDI0MCwg
PQoyNTUsIDI0MCkiLGhvdHBpbms6InJnYigyNTUsIDEwNSwgMTgwKSIsaW5kaWFucmVkOiJyZ2Io
MjA1LCA5MiwgOTIpIixpbmRpZ289CjoicmdiKCA3NSwgMCwgMTMwKSIsaXZvcnk6InJnYigyNTUs
IDI1NSwgMjQwKSIsa2hha2k6InJnYigyNDAsIDIzMCwgMTQwKSIsbD0KYXZlbmRlcjoicmdiKDIz
MCwgMjMwLCAyNTApIixsYXZlbmRlcmJsdXNoOiJyZ2IoMjU1LCAyNDAsIDI0NSkiLGxhd25ncmVl
bjoiPQpyZ2IoMTI0LCAyNTIsIDApIixsZW1vbmNoaWZmb246InJnYigyNTUsIDI1MCwgMjA1KSIs
bGlnaHRibHVlOiJyZ2IoMTczLCAyMTY9CiwgMjMwKSIsbGlnaHRjb3JhbDoicmdiKDI0MCwgMTI4
LCAxMjgpIixsaWdodGN5YW46InJnYigyMjQsIDI1NSwgMjU1KSIsbGlnaD0KdGdvbGRlbnJvZHll
bGxvdzoicmdiKDI1MCwgMjUwLCAyMTApIixsaWdodGdyYXk6InJnYigyMTEsIDIxMSwgMjExKSIs
bGlnaHRnPQpyZWVuOiJyZ2IoMTQ0LCAyMzgsIDE0NCkiLGxpZ2h0Z3JleToicmdiKDIxMSwgMjEx
LCAyMTEpIixsaWdodHBpbms6InJnYigyNTU9CiwgMTgyLCAxOTMpIixsaWdodHNhbG1vbjoicmdi
KDI1NSwgMTYwLCAxMjIpIixsaWdodHNlYWdyZWVuOiJyZ2IoIDMyLCAxNzgsID0KMTcwKSIsbGln
aHRza3libHVlOiJyZ2IoMTM1LCAyMDYsIDI1MCkiLGxpZ2h0c2xhdGVncmF5OiJyZ2IoMTE5LCAx
MzYsIDE1MykiPQosbGlnaHRzbGF0ZWdyZXk6InJnYigxMTksIDEzNiwgMTUzKSIsbGlnaHRzdGVl
bGJsdWU6InJnYigxNzYsIDE5NiwgMjIyKSIsbGk9CmdodHllbGxvdzoicmdiKDI1NSwgMjU1LCAy
MjQpIixsaW1lOiJyZ2IoIDAsIDI1NSwgMCkiLGxpbWVncmVlbjoicmdiKCA1MCwgMj0KMDUsIDUw
KSIsbGluZW46InJnYigyNTAsIDI0MCwgMjMwKSIsbWFnZW50YToicmdiKDI1NSwgMCwgMjU1KSIs
bWFyb29uOiJyZ2IoPQoxMjgsIDAsIDApIixtZWRpdW1hcXVhbWFyaW5lOiJyZ2IoMTAyLCAyMDUs
IDE3MCkiLG1lZGl1bWJsdWU6InJnYiggMCwgMCwgMjA9CjUpIixtZWRpdW1vcmNoaWQ6InJnYigx
ODYsIDg1LCAyMTEpIixtZWRpdW1wdXJwbGU6InJnYigxNDcsIDExMiwgMjE5KSIsbWVkaT0KdW1z
ZWFncmVlbjoicmdiKCA2MCwgMTc5LCAxMTMpIixtZWRpdW1zbGF0ZWJsdWU6InJnYigxMjMsIDEw
NCwgMjM4KSIsbWVkaXVtPQpzcHJpbmdncmVlbjoicmdiKCAwLCAyNTAsIDE1NCkiLG1lZGl1bXR1
cnF1b2lzZToicmdiKCA3MiwgMjA5LCAyMDQpIixtZWRpdW09CnZpb2xldHJlZDoicmdiKDE5OSwg
MjEsIDEzMykiLG1pZG5pZ2h0Ymx1ZToicmdiKCAyNSwgMjUsIDExMikiLG1pbnRjcmVhbToicj0K
Z2IoMjQ1LCAyNTUsIDI1MCkiLG1pc3R5cm9zZToicmdiKDI1NSwgMjI4LCAyMjUpIixtb2NjYXNp
bjoicmdiKDI1NSwgMjI4LCAxPQo4MSkiLG5hdmFqb3doaXRlOiJyZ2IoMjU1LCAyMjIsIDE3Myki
LG5hdnk6InJnYiggMCwgMCwgMTI4KSIsb2xkbGFjZToicmdiKDI9CjUzLCAyNDUsIDIzMCkiLG9s
aXZlOiJyZ2IoMTI4LCAxMjgsIDApIixvbGl2ZWRyYWI6InJnYigxMDcsIDE0MiwgMzUpIixvcmFu
Zz0KZToicmdiKDI1NSwgMTY1LCAwKSIsb3JhbmdlcmVkOiJyZ2IoMjU1LCA2OSwgMCkiLG9yY2hp
ZDoicmdiKDIxOCwgMTEyLCAyMTQpPQoiLHBhbGVnb2xkZW5yb2Q6InJnYigyMzgsIDIzMiwgMTcw
KSIscGFsZWdyZWVuOiJyZ2IoMTUyLCAyNTEsIDE1MikiLHBhbGV0dXI9CnF1b2lzZToicmdiKDE3
NSwgMjM4LCAyMzgpIixwYWxldmlvbGV0cmVkOiJyZ2IoMjE5LCAxMTIsIDE0NykiLHBhcGF5YXdo
aXA6Ij0KcmdiKDI1NSwgMjM5LCAyMTMpIixwZWFjaHB1ZmY6InJnYigyNTUsIDIxOCwgMTg1KSIs
cGVydToicmdiKDIwNSwgMTMzLCA2MykiPQoscGluazoicmdiKDI1NSwgMTkyLCAyMDMpIixwbHVt
OiJyZ2IoMjIxLCAxNjAsIDIyMSkiLHBvd2RlcmJsdWU6InJnYigxNzYsIDI9CjI0LCAyMzApIixw
dXJwbGU6InJnYigxMjgsIDAsIDEyOCkiLHJlZDoicmdiKDI1NSwgMCwgMCkiLHJvc3licm93bjoi
cmdiKDE4OD0KLCAxNDMsIDE0MykiLHJveWFsYmx1ZToicmdiKCA2NSwgMTA1LCAyMjUpIixzYWRk
bGVicm93bjoicmdiKDEzOSwgNjksIDE5KSIsPQpzYWxtb246InJnYigyNTAsIDEyOCwgMTE0KSIs
c2FuZHlicm93bjoicmdiKDI0NCwgMTY0LCA5NikiLHNlYWdyZWVuOiJyZ2IoIDQ9CjYsIDEzOSwg
ODcpIixzZWFzaGVsbDoicmdiKDI1NSwgMjQ1LCAyMzgpIixzaWVubmE6InJnYigxNjAsIDgyLCA0
NSkiLHNpbHZlcj0KOiJyZ2IoMTkyLCAxOTIsIDE5MikiLHNreWJsdWU6InJnYigxMzUsIDIwNiwg
MjM1KSIsc2xhdGVibHVlOiJyZ2IoMTA2LCA5MCwgPQoyMDUpIixzbGF0ZWdyYXk6InJnYigxMTIs
IDEyOCwgMTQ0KSIsc2xhdGVncmV5OiJyZ2IoMTEyLCAxMjgsIDE0NCkiLHNub3c6InI9CmdiKDI1
NSwgMjUwLCAyNTApIixzcHJpbmdncmVlbjoicmdiKCAwLCAyNTUsIDEyNykiLHN0ZWVsYmx1ZToi
cmdiKCA3MCwgMTMwLD0KIDE4MCkiLHRhbjoicmdiKDIxMCwgMTgwLCAxNDApIix0ZWFsOiJyZ2Io
IDAsIDEyOCwgMTI4KSIsdGhpc3RsZToicmdiKDIxNiwgPQoxOTEsIDIxNikiLHRvbWF0bzoicmdi
KDI1NSwgOTksIDcxKSIsdHVycXVvaXNlOiJyZ2IoIDY0LCAyMjQsIDIwOCkiLHZpb2xldDo9CiJy
Z2IoMjM4LCAxMzAsIDIzOCkiLHdoZWF0OiJyZ2IoMjQ1LCAyMjIsIDE3OSkiLHdoaXRlOiJyZ2Io
MjU1LCAyNTUsIDI1NSkiLD0Kd2hpdGVzbW9rZToicmdiKDI0NSwgMjQ1LCAyNDUpIix5ZWxsb3c6
InJnYigyNTUsIDI1NSwgMCkiLHllbGxvd2dyZWVuOiJyZ2IoPQoxNTQsIDIwNSwgNTApIn07TC5q
cXBsb3QuQXhpc0xhYmVsUmVuZGVyZXI9M0RmdW5jdGlvbihhaCl7TC5qcXBsb3QuRWxlbUNvbnQ9
CmFpbmVyLmNhbGwodGhpcyk7dGhpcy5heGlzO3RoaXMuc2hvdz0zRHRydWU7dGhpcy5sYWJlbD0z
RCIiO3RoaXMuZm9udEZhbWlseT0KPTNEbnVsbDt0aGlzLmZvbnRTaXplPTNEbnVsbDt0aGlzLnRl
eHRDb2xvcj0zRG51bGw7dGhpcy5fZWxlbTt0aGlzLmVzY2FwZUhUPQpNTD0zRGZhbHNlO0wuZXh0
ZW5kKHRydWUsdGhpcyxhaCl9O0wuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZT0z
RG49CmV3IEwuanFwbG90LkVsZW1Db250YWluZXIoKTtMLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJl
ci5wcm90b3R5cGUuY29uc3RydWN0bz0Kcj0zREwuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyO0wu
anFwbG90LkF4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5pbml0PTNEPQpmdW5jdGlvbihhaCl7
TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX07TC5qcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIucHJvdG90
eXBlLmQ9CnJhdz0zRGZ1bmN0aW9uKGFoLGFpKXtpZih0aGlzLl9lbGVtKXt0aGlzLl9lbGVtLmVt
cHR5Rm9yY2UoKTt0aGlzLl9lbGVtPTNEbj0KdWxsfXRoaXMuX2VsZW09M0RMKCc8ZGl2IHN0eWxl
PTNEInBvc2l0aW9uOmFic29sdXRlOyIgY2xhc3M9M0QianFwbG90LScrdGhpPQpzLmF4aXMrJy1s
YWJlbCI+PC9kaXY+Jyk7aWYoTnVtYmVyKHRoaXMubGFiZWwpKXt0aGlzLl9lbGVtLmNzcygid2hp
dGUtc3BhY2U9CiIsIm5vd3JhcCIpfWlmKCF0aGlzLmVzY2FwZUhUTUwpe3RoaXMuX2VsZW0uaHRt
bCh0aGlzLmxhYmVsKX1lbHNle3RoaXMuX2VsZT0KbS50ZXh0KHRoaXMubGFiZWwpfWlmKHRoaXMu
Zm9udEZhbWlseSl7dGhpcy5fZWxlbS5jc3MoImZvbnQtZmFtaWx5Iix0aGlzLmZvPQpudEZhbWls
eSl9aWYodGhpcy5mb250U2l6ZSl7dGhpcy5fZWxlbS5jc3MoImZvbnQtc2l6ZSIsdGhpcy5mb250
U2l6ZSl9aWYodGg9CmlzLnRleHRDb2xvcil7dGhpcy5fZWxlbS5jc3MoImNvbG9yIix0aGlzLnRl
eHRDb2xvcil9cmV0dXJuIHRoaXMuX2VsZW19O0wuaj0KcXBsb3QuQXhpc0xhYmVsUmVuZGVyZXIu
cHJvdG90eXBlLnBhY2s9M0RmdW5jdGlvbigpe307TC5qcXBsb3QuQXhpc1RpY2tSZW5kPQplcmVy
PTNEZnVuY3Rpb24oYWgpe0wuanFwbG90LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLm1h
cms9M0Qib3V0c2lkZSI9Cjt0aGlzLmF4aXM7dGhpcy5zaG93TWFyaz0zRHRydWU7dGhpcy5zaG93
R3JpZGxpbmU9M0R0cnVlO3RoaXMuaXNNaW5vclRpY2s9Cj0zRGZhbHNlO3RoaXMuc2l6ZT0zRDQ7
dGhpcy5tYXJrU2l6ZT0zRDY7dGhpcy5zaG93PTNEdHJ1ZTt0aGlzLnNob3dMYWJlbD0zRD0KdHJ1
ZTt0aGlzLmxhYmVsPTNEbnVsbDt0aGlzLnZhbHVlPTNEbnVsbDt0aGlzLl9zdHlsZXM9M0R7fTt0
aGlzLmZvcm1hdHRlcj0KPTNETC5qcXBsb3QuRGVmYXVsdFRpY2tGb3JtYXR0ZXI7dGhpcy5wcmVm
aXg9M0QiIjt0aGlzLnN1ZmZpeD0zRCIiO3RoaXMuZm9yPQptYXRTdHJpbmc9M0QiIjt0aGlzLmZv
bnRGYW1pbHk7dGhpcy5mb250U2l6ZTt0aGlzLnRleHRDb2xvcjt0aGlzLmVzY2FwZUhUTUw9Cj0z
RGZhbHNlO3RoaXMuX2VsZW07dGhpcy5fYnJlYWtUaWNrPTNEZmFsc2U7TC5leHRlbmQodHJ1ZSx0
aGlzLGFoKX07TC5qcXBsbz0KdC5BeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5pbml0PTNEZnVu
Y3Rpb24oYWgpe0wuZXh0ZW5kKHRydWUsdGhpcyxhaCl9O0wuPQpqcXBsb3QuQXhpc1RpY2tSZW5k
ZXJlci5wcm90b3R5cGU9M0RuZXcgTC5qcXBsb3QuRWxlbUNvbnRhaW5lcigpO0wuanFwbG90LkE9
Cnhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3I9M0RMLmpxcGxvdC5BeGlzVGlj
a1JlbmRlcmVyO0wuanFwbG90Lj0KQXhpc1RpY2tSZW5kZXJlci5wcm90b3R5cGUuc2V0VGljaz0z
RGZ1bmN0aW9uKGFoLGFqLGFpKXt0aGlzLnZhbHVlPTNEYWg7dGhpPQpzLmF4aXM9M0RhajtpZihh
aSl7dGhpcy5pc01pbm9yVGljaz0zRHRydWV9cmV0dXJuIHRoaXN9O0wuanFwbG90LkF4aXNUaWNr
UmU9Cm5kZXJlci5wcm90b3R5cGUuZHJhdz0zRGZ1bmN0aW9uKCl7aWYodGhpcy5sYWJlbD0zRD0z
RD0zRG51bGwpe3RoaXMubGFiZWw9Cj0zRHRoaXMucHJlZml4K3RoaXMuZm9ybWF0dGVyKHRoaXMu
Zm9ybWF0U3RyaW5nLHRoaXMudmFsdWUpK3RoaXMuc3VmZml4fXZhcj0KIGFpPTNEe3Bvc2l0aW9u
OiJhYnNvbHV0ZSJ9O2lmKE51bWJlcih0aGlzLmxhYmVsKSl7YWkud2hpdFNwYWNlPTNEIm5vd3Jh
cCJ9PQppZih0aGlzLl9lbGVtKXt0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLl9lbGVtPTNE
bnVsbH10aGlzLl9lbGVtPTNETChkb2M9CnVtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt0aGlz
Ll9lbGVtLmFkZENsYXNzKCJqcXBsb3QtIit0aGlzLmF4aXMrIi10aWNrIj0KKTtpZighdGhpcy5l
c2NhcGVIVE1MKXt0aGlzLl9lbGVtLmh0bWwodGhpcy5sYWJlbCl9ZWxzZXt0aGlzLl9lbGVtLnRl
eHQodGhpPQpzLmxhYmVsKX10aGlzLl9lbGVtLmNzcyhhaSk7Zm9yKHZhciBhaCBpbiB0aGlzLl9z
dHlsZXMpe3RoaXMuX2VsZW0uY3NzKGFoLHQ9Cmhpcy5fc3R5bGVzW2FoXSl9aWYodGhpcy5mb250
RmFtaWx5KXt0aGlzLl9lbGVtLmNzcygiZm9udC1mYW1pbHkiLHRoaXMuZm9udD0KRmFtaWx5KX1p
Zih0aGlzLmZvbnRTaXplKXt0aGlzLl9lbGVtLmNzcygiZm9udC1zaXplIix0aGlzLmZvbnRTaXpl
KX1pZih0aGlzPQoudGV4dENvbG9yKXt0aGlzLl9lbGVtLmNzcygiY29sb3IiLHRoaXMudGV4dENv
bG9yKX1pZih0aGlzLl9icmVha1RpY2spe3RoaXM9Ci5fZWxlbS5hZGRDbGFzcygianFwbG90LWJy
ZWFrVGljayIpfXJldHVybiB0aGlzLl9lbGVtfTtMLmpxcGxvdC5EZWZhdWx0VGljaz0KRm9ybWF0
dGVyPTNEZnVuY3Rpb24oYWgsYWkpe2lmKHR5cGVvZiBhaT0zRD0zRCJudW1iZXIiKXtpZighYWgp
e2FoPTNETC5qcXBsPQpvdC5jb25maWcuZGVmYXVsdFRpY2tGb3JtYXRTdHJpbmd9cmV0dXJuIEwu
anFwbG90LnNwcmludGYoYWgsYWkpfWVsc2V7cmV0dXI9Cm4gU3RyaW5nKGFpKX19O0wuanFwbG90
LlBlcmNlbnRUaWNrRm9ybWF0dGVyPTNEZnVuY3Rpb24oYWgsYWkpe2lmKHR5cGVvZiBhaT0KPTNE
PTNEIm51bWJlciIpe2FpPTNEMTAwKmFpO2lmKCFhaCl7YWg9M0RMLmpxcGxvdC5jb25maWcuZGVm
YXVsdFRpY2tGb3JtYXRTPQp0cmluZ31yZXR1cm4gTC5qcXBsb3Quc3ByaW50ZihhaCxhaSl9ZWxz
ZXtyZXR1cm4gU3RyaW5nKGFpKX19O0wuanFwbG90LkF4aXM9ClRpY2tSZW5kZXJlci5wcm90b3R5
cGUucGFjaz0zRGZ1bmN0aW9uKCl7fTtMLmpxcGxvdC5DYW52YXNHcmlkUmVuZGVyZXI9M0RmdT0K
bmN0aW9uKCl7dGhpcy5zaGFkb3dSZW5kZXJlcj0zRG5ldyBMLmpxcGxvdC5TaGFkb3dSZW5kZXJl
cigpfTtMLmpxcGxvdC5DYW52PQphc0dyaWRSZW5kZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0
aW9uKGFpKXt0aGlzLl9jdHg7TC5leHRlbmQodHJ1ZSx0aGlzLGE9CmkpO3ZhciBhaD0zRHtsaW5l
Sm9pbjoibWl0ZXIiLGxpbmVDYXA6InJvdW5kIixmaWxsOmZhbHNlLGlzYXJjOmZhbHNlLGFuZ2xl
Oj0KdGhpcy5zaGFkb3dBbmdsZSxvZmZzZXQ6dGhpcy5zaGFkb3dPZmZzZXQsYWxwaGE6dGhpcy5z
aGFkb3dBbHBoYSxkZXB0aDp0aGlzPQouc2hhZG93RGVwdGgsbGluZVdpZHRoOnRoaXMuc2hhZG93
V2lkdGgsY2xvc2VQYXRoOmZhbHNlLHN0cm9rZVN0eWxlOnRoaXMuc2g9CmFkb3dDb2xvcn07dGhp
cy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5pbml0KGFoKX07TC5qcXBsb3QuQ2FudmFzR3JpZFJl
bmRlcj0KZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9M0RmdW5jdGlvbihhayl7dmFyIGFqO2lm
KHRoaXMuX2VsZW0pe2lmKEwuanFwbG90PQoudXNlX2V4Y2FudmFzJiZ3aW5kb3cuR192bWxDYW52
YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQhPTNEPTNEdSl7YWo9M0R0aGlzLl89CmVsZW0uZ2V0KDAp
O3dpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudChhaik7YWo9M0RudWxsfXRo
aXMuX2VsZT0KbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT0zRG51bGx9YWo9M0Rhay5jYW52YXNN
YW5hZ2VyLmdldENhbnZhcygpO3ZhciBhaD0KPTNEdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGg7
dmFyIGFpPTNEdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0O2FqLndpZHRoPQo9M0RhaDthai5o
ZWlnaHQ9M0RhaTt0aGlzLl9lbGVtPTNETChhaik7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90
LWdyaWQtY2E9Cm52YXMiKTt0aGlzLl9lbGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0
OjAsdG9wOjB9KTthaj0zRGFrLmNhbnZhc01hbj0KYWdlci5pbml0Q2FudmFzKGFqKTt0aGlzLl90
b3A9M0R0aGlzLl9vZmZzZXRzLnRvcDt0aGlzLl9ib3R0b209M0RhaS10aGlzLl9vPQpmZnNldHMu
Ym90dG9tO3RoaXMuX2xlZnQ9M0R0aGlzLl9vZmZzZXRzLmxlZnQ7dGhpcy5fcmlnaHQ9M0RhaC10
aGlzLl9vZmZzZXQ9CnMucmlnaHQ7dGhpcy5fd2lkdGg9M0R0aGlzLl9yaWdodC10aGlzLl9sZWZ0
O3RoaXMuX2hlaWdodD0zRHRoaXMuX2JvdHRvbS10aD0KaXMuX3RvcDthaj0zRG51bGw7cmV0dXJu
IHRoaXMuX2VsZW19O0wuanFwbG90LkNhbnZhc0dyaWRSZW5kZXJlci5wcm90b3R5cGUuPQpkcmF3
PTNEZnVuY3Rpb24oKXt0aGlzLl9jdHg9M0R0aGlzLl9lbGVtLmdldCgwKS5nZXRDb250ZXh0KCIy
ZCIpO3ZhciBhdD0zRHQ9Cmhpcy5fY3R4O3ZhciBhdz0zRHRoaXMuX2F4ZXM7YXQuc2F2ZSgpO2F0
LmNsZWFyUmVjdCgwLDAsdGhpcy5fcGxvdERpbWVuc2lvbj0Kcy53aWR0aCx0aGlzLl9wbG90RGlt
ZW5zaW9ucy5oZWlnaHQpO2F0LmZpbGxTdHlsZT0zRHRoaXMuYmFja2dyb3VuZENvbG9yfHx0PQpo
aXMuYmFja2dyb3VuZDthdC5maWxsUmVjdCh0aGlzLl9sZWZ0LHRoaXMuX3RvcCx0aGlzLl93aWR0
aCx0aGlzLl9oZWlnaHQpO2E9CnQuc2F2ZSgpO2F0LmxpbmVKb2luPTNEIm1pdGVyIjthdC5saW5l
Q2FwPTNEImJ1dHQiO2F0LmxpbmVXaWR0aD0zRHRoaXMuZ3JpZD0KTGluZVdpZHRoO2F0LnN0cm9r
ZVN0eWxlPTNEdGhpcy5ncmlkTGluZUNvbG9yO3ZhciBhQSxheixhcCxhcTt2YXIgYW09M0RbInhh
PQp4aXMiLCJ5YXhpcyIsIngyYXhpcyIsInkyYXhpcyJdO2Zvcih2YXIgYXk9M0Q0O2F5PjA7YXkt
LSl7dmFyIGFEPTNEYW1bYXktMV09Cjt2YXIgYWg9M0Rhd1thRF07dmFyIGFCPTNEYWguX3RpY2tz
O3ZhciBhcj0zRGFCLmxlbmd0aDtpZihhaC5zaG93KXtpZihhaC5kcj0KYXdCYXNlbGluZSl7dmFy
IGFDPTNEe307aWYoYWguYmFzZWxpbmVXaWR0aCE9M0Q9M0RudWxsKXthQy5saW5lV2lkdGg9M0Rh
aC5iPQphc2VsaW5lV2lkdGh9aWYoYWguYmFzZWxpbmVDb2xvciE9M0Q9M0RudWxsKXthQy5zdHJv
a2VTdHlsZT0zRGFoLmJhc2VsaW5lQ289Cmxvcn1zd2l0Y2goYUQpe2Nhc2UieGF4aXMiOmFvKHRo
aXMuX2xlZnQsdGhpcy5fYm90dG9tLHRoaXMuX3JpZ2h0LHRoaXMuX2JvdD0KdG9tLGFDKTticmVh
aztjYXNlInlheGlzIjphbyh0aGlzLl9sZWZ0LHRoaXMuX2JvdHRvbSx0aGlzLl9sZWZ0LHRoaXMu
X3RvcCxhPQpDKTticmVhaztjYXNlIngyYXhpcyI6YW8odGhpcy5fbGVmdCx0aGlzLl9ib3R0b20s
dGhpcy5fcmlnaHQsdGhpcy5fYm90dG9tLGE9CkMpO2JyZWFrO2Nhc2UieTJheGlzIjphbyh0aGlz
Ll9yaWdodCx0aGlzLl9ib3R0b20sdGhpcy5fcmlnaHQsdGhpcy5fdG9wLGFDKT0KO2JyZWFrfX1m
b3IodmFyIGF1PTNEYXI7YXU+MDthdS0tKXt2YXIgYW49M0RhQlthdS0xXTtpZihhbi5zaG93KXt2
YXIgYWs9M0RNPQphdGgucm91bmQoYWgudTJwKGFuLnZhbHVlKSkrMC41O3N3aXRjaChhRCl7Y2Fz
ZSJ4YXhpcyI6aWYoYW4uc2hvd0dyaWRsaW5lJiY9CnRoaXMuZHJhd0dyaWRsaW5lcyYmKCghYW4u
aXNNaW5vclRpY2smJmFoLmRyYXdNYWpvckdyaWRsaW5lcyl8fChhbi5pc01pbm9yVD0KaWNrJiZh
aC5kcmF3TWlub3JHcmlkbGluZXMpKSl7YW8oYWssdGhpcy5fdG9wLGFrLHRoaXMuX2JvdHRvbSl9
aWYoYW4uc2hvd01hPQpyayYmYW4ubWFyayYmKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNYWpv
clRpY2tNYXJrcyl8fChhbi5pc01pbm9yVGljayYmYWg9Ci5kcmF3TWlub3JUaWNrTWFya3MpKSl7
YXA9M0Rhbi5tYXJrU2l6ZTthcT0zRGFuLm1hcms7dmFyIGFrPTNETWF0aC5yb3VuZChhaD0KLnUy
cChhbi52YWx1ZSkpKzAuNTtzd2l0Y2goYXEpe2Nhc2Uib3V0c2lkZSI6YUE9M0R0aGlzLl9ib3R0
b207YXo9M0R0aGlzLl9iPQpvdHRvbSthcDticmVhaztjYXNlImluc2lkZSI6YUE9M0R0aGlzLl9i
b3R0b20tYXA7YXo9M0R0aGlzLl9ib3R0b207YnJlYWs7Y2E9CnNlImNyb3NzIjphQT0zRHRoaXMu
X2JvdHRvbS1hcDthej0zRHRoaXMuX2JvdHRvbSthcDticmVhaztkZWZhdWx0OmFBPTNEdGhpcz0K
Ll9ib3R0b207YXo9M0R0aGlzLl9ib3R0b20rYXA7YnJlYWt9aWYodGhpcy5zaGFkb3cpe3RoaXMu
cmVuZGVyZXIuc2hhZG93UmVuPQpkZXJlci5kcmF3KGF0LFtbYWssYUFdLFthayxhel1dLHtsaW5l
Q2FwOiJidXR0IixsaW5lV2lkdGg6dGhpcy5ncmlkTGluZVdpZHQ9Cmgsb2Zmc2V0OnRoaXMuZ3Jp
ZExpbmVXaWR0aCowLjc1LGRlcHRoOjIsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhh
az0KLGFBLGFrLGF6KX1icmVhaztjYXNlInlheGlzIjppZihhbi5zaG93R3JpZGxpbmUmJnRoaXMu
ZHJhd0dyaWRsaW5lcyYmKCghYW4uPQppc01pbm9yVGljayYmYWguZHJhd01ham9yR3JpZGxpbmVz
KXx8KGFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWlub3JHcmlkbGluZXM9CikpKXthbyh0aGlzLl9y
aWdodCxhayx0aGlzLl9sZWZ0LGFrKX1pZihhbi5zaG93TWFyayYmYW4ubWFyayYmKCghYW4uaXNN
aW5vcj0KVGljayYmYWguZHJhd01ham9yVGlja01hcmtzKXx8KGFuLmlzTWlub3JUaWNrJiZhaC5k
cmF3TWlub3JUaWNrTWFya3MpKSl7YXA9Cj0zRGFuLm1hcmtTaXplO2FxPTNEYW4ubWFyazt2YXIg
YWs9M0RNYXRoLnJvdW5kKGFoLnUycChhbi52YWx1ZSkpKzAuNTtzd2l0Yz0KaChhcSl7Y2FzZSJv
dXRzaWRlIjphQT0zRHRoaXMuX2xlZnQtYXA7YXo9M0R0aGlzLl9sZWZ0O2JyZWFrO2Nhc2UiaW5z
aWRlIjphPQpBPTNEdGhpcy5fbGVmdDthej0zRHRoaXMuX2xlZnQrYXA7YnJlYWs7Y2FzZSJjcm9z
cyI6YUE9M0R0aGlzLl9sZWZ0LWFwO2F6PQo9M0R0aGlzLl9sZWZ0K2FwO2JyZWFrO2RlZmF1bHQ6
YUE9M0R0aGlzLl9sZWZ0LWFwO2F6PTNEdGhpcy5fbGVmdDticmVha31pZig9CnRoaXMuc2hhZG93
KXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXQsW1thQSxha10sW2F6LGFrXV0s
e2xpbmVDYT0KcDoiYnV0dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0
OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGZpPQpsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1h
byhhQSxhayxheixhayx7c3Ryb2tlU3R5bGU6YWguYm9yZGVyQ29sb3J9KX1icmU9CmFrO2Nhc2Ui
eDJheGlzIjppZihhbi5zaG93R3JpZGxpbmUmJnRoaXMuZHJhd0dyaWRsaW5lcyYmKCghYW4uaXNN
aW5vclRpY2smJj0KYWguZHJhd01ham9yR3JpZGxpbmVzKXx8KGFuLmlzTWlub3JUaWNrJiZhaC5k
cmF3TWlub3JHcmlkbGluZXMpKSl7YW8oYWssdGhpPQpzLl9ib3R0b20sYWssdGhpcy5fdG9wKX1p
Zihhbi5zaG93TWFyayYmYW4ubWFyayYmKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXc9Ck1ham9y
VGlja01hcmtzKXx8KGFuLmlzTWlub3JUaWNrJiZhaC5kcmF3TWlub3JUaWNrTWFya3MpKSl7YXA9
M0Rhbi5tYXJrU2l6ZT0KO2FxPTNEYW4ubWFyazt2YXIgYWs9M0RNYXRoLnJvdW5kKGFoLnUycChh
bi52YWx1ZSkpKzAuNTtzd2l0Y2goYXEpe2Nhc2Uib3V0PQpzaWRlIjphQT0zRHRoaXMuX3RvcC1h
cDthej0zRHRoaXMuX3RvcDticmVhaztjYXNlImluc2lkZSI6YUE9M0R0aGlzLl90b3A7YXo9Cj0z
RHRoaXMuX3RvcCthcDticmVhaztjYXNlImNyb3NzIjphQT0zRHRoaXMuX3RvcC1hcDthej0zRHRo
aXMuX3RvcCthcDticmVhaz0KO2RlZmF1bHQ6YUE9M0R0aGlzLl90b3AtYXA7YXo9M0R0aGlzLl90
b3A7YnJlYWt9aWYodGhpcy5zaGFkb3cpe3RoaXMucmVuZGVyPQplci5zaGFkb3dSZW5kZXJlci5k
cmF3KGF0LFtbYWssYUFdLFthayxhel1dLHtsaW5lQ2FwOiJidXR0IixsaW5lV2lkdGg6dGhpcy49
CmdyaWRMaW5lV2lkdGgsb2Zmc2V0OnRoaXMuZ3JpZExpbmVXaWR0aCowLjc1LGRlcHRoOjIsZmls
bDpmYWxzZSxjbG9zZVBhdGg6Zj0KYWxzZX0pfWFvKGFrLGFBLGFrLGF6KX1icmVhaztjYXNlInky
YXhpcyI6aWYoYW4uc2hvd0dyaWRsaW5lJiZ0aGlzLmRyYXdHcmlkPQpsaW5lcyYmKCghYW4uaXNN
aW5vclRpY2smJmFoLmRyYXdNYWpvckdyaWRsaW5lcyl8fChhbi5pc01pbm9yVGljayYmYWguZHJh
d009Cmlub3JHcmlkbGluZXMpKSl7YW8odGhpcy5fbGVmdCxhayx0aGlzLl9yaWdodCxhayl9aWYo
YW4uc2hvd01hcmsmJmFuLm1hcmsmJj0KKCghYW4uaXNNaW5vclRpY2smJmFoLmRyYXdNYWpvclRp
Y2tNYXJrcyl8fChhbi5pc01pbm9yVGljayYmYWguZHJhd01pbm9yVGljPQprTWFya3MpKSl7YXA9
M0Rhbi5tYXJrU2l6ZTthcT0zRGFuLm1hcms7dmFyIGFrPTNETWF0aC5yb3VuZChhaC51MnAoYW4u
dmFsdWU9CikpKzAuNTtzd2l0Y2goYXEpe2Nhc2Uib3V0c2lkZSI6YUE9M0R0aGlzLl9yaWdodDth
ej0zRHRoaXMuX3JpZ2h0K2FwO2JyZWFrOz0KY2FzZSJpbnNpZGUiOmFBPTNEdGhpcy5fcmlnaHQt
YXA7YXo9M0R0aGlzLl9yaWdodDticmVhaztjYXNlImNyb3NzIjphQT0zRHRoPQppcy5fcmlnaHQt
YXA7YXo9M0R0aGlzLl9yaWdodCthcDticmVhaztkZWZhdWx0OmFBPTNEdGhpcy5fcmlnaHQ7YXo9
M0R0aGlzLl89CnJpZ2h0K2FwO2JyZWFrfWlmKHRoaXMuc2hhZG93KXt0aGlzLnJlbmRlcmVyLnNo
YWRvd1JlbmRlcmVyLmRyYXcoYXQsW1thQSxhaz0KXSxbYXosYWtdXSx7bGluZUNhcDoiYnV0dCIs
bGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0OnRoaXMuZ3JpPQpkTGluZVdp
ZHRoKjAuNzUsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhhQSxhayxheixhayx7c3Ry
b2tlU3R5bGU6YWg9Ci5ib3JkZXJDb2xvcn0pfWJyZWFrO2RlZmF1bHQ6YnJlYWt9fX1hbj0zRG51
bGx9YWg9M0RudWxsO2FCPTNEbnVsbH1hbT0zRFsieT0KM2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMi
LCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMiLCJ5OWF4aXMiLCJ5TWlkQXhpcyJdO2ZvPQpyKHZh
ciBheT0zRDc7YXk+MDtheS0tKXt2YXIgYWg9M0Rhd1thbVtheS0xXV07dmFyIGFCPTNEYWguX3Rp
Y2tzO2lmKGFoLnNob3c9Cil7dmFyIGFpPTNEYUJbYWgubnVtYmVyVGlja3MtMV07dmFyIGFsPTNE
YUJbMF07dmFyIGFqPTNEYWguZ2V0TGVmdCgpO3ZhciBhdj0KPTNEW1thaixhaS5nZXRUb3AoKSth
aS5nZXRIZWlnaHQoKS8yXSxbYWosYWwuZ2V0VG9wKCkrYWwuZ2V0SGVpZ2h0KCkvMisxXV07PQpp
Zih0aGlzLnNoYWRvdyl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF0LGF2LHts
aW5lQ2FwOiJidXR0IixmaWw9Cmw6ZmFsc2UsY2xvc2VQYXRoOmZhbHNlfSl9YW8oYXZbMF1bMF0s
YXZbMF1bMV0sYXZbMV1bMF0sYXZbMV1bMV0se2xpbmVDYXA6Ij0KYnV0dCIsc3Ryb2tlU3R5bGU6
YWguYm9yZGVyQ29sb3IsbGluZVdpZHRoOmFoLmJvcmRlcldpZHRofSk7Zm9yKHZhciBhdT0zRGFC
PQoubGVuZ3RoO2F1PjA7YXUtLSl7dmFyIGFuPTNEYUJbYXUtMV07YXA9M0Rhbi5tYXJrU2l6ZTth
cT0zRGFuLm1hcms7dmFyIGFrPQo9M0RNYXRoLnJvdW5kKGFoLnUycChhbi52YWx1ZSkpKzAuNTtp
Zihhbi5zaG93TWFyayYmYW4ubWFyayl7c3dpdGNoKGFxKXtjYXM9CmUib3V0c2lkZSI6YUE9M0Rh
ajthej0zRGFqK2FwO2JyZWFrO2Nhc2UiaW5zaWRlIjphQT0zRGFqLWFwO2F6PTNEYWo7YnJlYWs7
Yz0KYXNlImNyb3NzIjphQT0zRGFqLWFwO2F6PTNEYWorYXA7YnJlYWs7ZGVmYXVsdDphQT0zRGFq
O2F6PTNEYWorYXA7YnJlYWt9YXY9Cj0zRFtbYUEsYWtdLFtheixha11dO2lmKHRoaXMuc2hhZG93
KXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmRyYXcoYXQsYT0Kdix7bGluZUNhcDoiYnV0
dCIsbGluZVdpZHRoOnRoaXMuZ3JpZExpbmVXaWR0aCoxLjUsb2Zmc2V0OnRoaXMuZ3JpZExpbmVX
aWR0PQpoKjAuNzUsZmlsbDpmYWxzZSxjbG9zZVBhdGg6ZmFsc2V9KX1hbyhhQSxhayxheixhayx7
c3Ryb2tlU3R5bGU6YWguYm9yZGVyQ289Cmxvcn0pfWFuPTNEbnVsbH1hbD0zRG51bGx9YWg9M0Ru
dWxsO2FCPTNEbnVsbH1hdC5yZXN0b3JlKCk7ZnVuY3Rpb24gYW8oYUgsYT0KRyxhRSxheCxhRil7
YXQuc2F2ZSgpO2FGPTNEYUZ8fHt9O2lmKGFGLmxpbmVXaWR0aD0zRD0zRG51bGx8fGFGLmxpbmVX
aWR0aCE9Cj0zRDApe0wuZXh0ZW5kKHRydWUsYXQsYUYpO2F0LmJlZ2luUGF0aCgpO2F0Lm1vdmVU
byhhSCxhRyk7YXQubGluZVRvKGFFLGF4KT0KO2F0LnN0cm9rZSgpO2F0LnJlc3RvcmUoKX19aWYo
dGhpcy5zaGFkb3cpe3ZhciBhdj0zRFtbdGhpcy5fbGVmdCx0aGlzLl9ib3R0PQpvbV0sW3RoaXMu
X3JpZ2h0LHRoaXMuX2JvdHRvbV0sW3RoaXMuX3JpZ2h0LHRoaXMuX3RvcF1dO3RoaXMucmVuZGVy
ZXIuc2hhZG89CndSZW5kZXJlci5kcmF3KGF0LGF2KX1pZih0aGlzLmJvcmRlcldpZHRoIT0zRDAm
JnRoaXMuZHJhd0JvcmRlcil7YW8odGhpcy5fbD0KZWZ0LHRoaXMuX3RvcCx0aGlzLl9yaWdodCx0
aGlzLl90b3Ase2xpbmVDYXA6InJvdW5kIixzdHJva2VTdHlsZTphdy54MmF4aXMuPQpib3JkZXJD
b2xvcixsaW5lV2lkdGg6YXcueDJheGlzLmJvcmRlcldpZHRofSk7YW8odGhpcy5fcmlnaHQsdGhp
cy5fdG9wLHRoaXM9Ci5fcmlnaHQsdGhpcy5fYm90dG9tLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tl
U3R5bGU6YXcueTJheGlzLmJvcmRlckNvbG9yLGxpbj0KZVdpZHRoOmF3LnkyYXhpcy5ib3JkZXJX
aWR0aH0pO2FvKHRoaXMuX3JpZ2h0LHRoaXMuX2JvdHRvbSx0aGlzLl9sZWZ0LHRoaXMuPQpfYm90
dG9tLHtsaW5lQ2FwOiJyb3VuZCIsc3Ryb2tlU3R5bGU6YXcueGF4aXMuYm9yZGVyQ29sb3IsbGlu
ZVdpZHRoOmF3LnhheGk9CnMuYm9yZGVyV2lkdGh9KTthbyh0aGlzLl9sZWZ0LHRoaXMuX2JvdHRv
bSx0aGlzLl9sZWZ0LHRoaXMuX3RvcCx7bGluZUNhcDoicj0Kb3VuZCIsc3Ryb2tlU3R5bGU6YXcu
eWF4aXMuYm9yZGVyQ29sb3IsbGluZVdpZHRoOmF3LnlheGlzLmJvcmRlcldpZHRofSl9YXQuPQpy
ZXN0b3JlKCk7YXQ9M0RudWxsO2F3PTNEbnVsbH07TC5qcXBsb3QuRGl2VGl0bGVSZW5kZXJlcj0z
RGZ1bmN0aW9uKCl7fTtMLmo9CnFwbG90LkRpdlRpdGxlUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9
M0RmdW5jdGlvbihhaCl7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKT0KfTtMLmpxcGxvdC5EaXZUaXRs
ZVJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24oKXtpZih0aGlzLl9lbGVtKXt0aGlz
PQouX2VsZW0uZW1wdHlGb3JjZSgpO3RoaXMuX2VsZW09M0RudWxsfXZhciBhaz0zRHRoaXMucmVu
ZGVyZXI7dmFyIGFqPTNEZG9jdW09CmVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLl9lbGVt
PTNETChhaik7dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LXRpdD0KbGUiKTtpZighdGhpcy50
ZXh0KXt0aGlzLnNob3c9M0RmYWxzZTt0aGlzLl9lbGVtLmhlaWdodCgwKTt0aGlzLl9lbGVtLndp
ZHRoPQooMCl9ZWxzZXtpZih0aGlzLnRleHQpe3ZhciBhaDtpZih0aGlzLmNvbG9yKXthaD0zRHRo
aXMuY29sb3J9ZWxzZXtpZih0aGlzLnQ9CmV4dENvbG9yKXthaD0zRHRoaXMudGV4dENvbG9yfX12
YXIgYWk9M0R7cG9zaXRpb246ImFic29sdXRlIix0b3A6IjBweCIsbGVmdD0KOiIwcHgifTtpZih0
aGlzLl9wbG90V2lkdGgpe2FpLndpZHRoPTNEdGhpcy5fcGxvdFdpZHRoKyJweCJ9aWYodGhpcy5m
b250U2l6PQplKXthaS5mb250U2l6ZT0zRHRoaXMuZm9udFNpemV9aWYodHlwZW9mIHRoaXMudGV4
dEFsaWduPTNEPTNEPTNEInN0cmluZyIpe2E9CmkudGV4dEFsaWduPTNEdGhpcy50ZXh0QWxpZ259
ZWxzZXthaS50ZXh0QWxpZ249M0QiY2VudGVyIn1pZihhaCl7YWkuY29sb3I9Cj0zRGFofWlmKHRo
aXMucGFkZGluZ0JvdHRvbSl7YWkucGFkZGluZ0JvdHRvbT0zRHRoaXMucGFkZGluZ0JvdHRvbX1p
Zih0aGlzLj0KZm9udEZhbWlseSl7YWkuZm9udEZhbWlseT0zRHRoaXMuZm9udEZhbWlseX10aGlz
Ll9lbGVtLmNzcyhhaSk7aWYodGhpcy5lc2NhPQpwZUh0bWwpe3RoaXMuX2VsZW0udGV4dCh0aGlz
LnRleHQpfWVsc2V7dGhpcy5fZWxlbS5odG1sKHRoaXMudGV4dCl9fX1haj0zRG49CnVsbDtyZXR1
cm4gdGhpcy5fZWxlbX07TC5qcXBsb3QuRGl2VGl0bGVSZW5kZXJlci5wcm90b3R5cGUucGFjaz0z
RGZ1bmN0aW9uKD0KKXt9O3ZhciByPTNEMC4xO0wuanFwbG90LkxpbmVQYXR0ZXJuPTNEZnVuY3Rp
b24oYXcsYXEpe3ZhciBhcD0zRHtkb3R0ZWQ6W3IsPQpMLmpxcGxvdC5jb25maWcuZG90R2FwTGVu
Z3RoXSxkYXNoZWQ6W0wuanFwbG90LmNvbmZpZy5kYXNoTGVuZ3RoLEwuanFwbG90LmM9Cm9uZmln
LmdhcExlbmd0aF0sc29saWQ6bnVsbH07aWYodHlwZW9mIGFxPTNEPTNEPTNEInN0cmluZyIpe2lm
KGFxWzBdPTNEPTNEPQo9M0QiLiJ8fGFxWzBdPTNEPTNEPTNEIi0iKXt2YXIgYXg9M0RhcTthcT0z
RFtdO2Zvcih2YXIgYW89M0QwLGFsPTNEYXgubGVuZ3Q9Cmg7YW88YWw7YW8rKyl7aWYoYXhbYW9d
PTNEPTNEPTNEIi4iKXthcS5wdXNoKHIpfWVsc2V7aWYoYXhbYW9dPTNEPTNEPTNEIi0iKT0Ke2Fx
LnB1c2goTC5qcXBsb3QuY29uZmlnLmRhc2hMZW5ndGgpfWVsc2V7Y29udGludWV9fWFxLnB1c2go
TC5qcXBsb3QuY29uZmlnPQouZ2FwTGVuZ3RoKX19ZWxzZXthcT0zRGFwW2FxXX19aWYoIShhcSYm
YXEubGVuZ3RoKSl7cmV0dXJuIGF3fXZhciBhaz0zRDA7dmE9CnIgYXI9M0RhcVswXTt2YXIgYXU9
M0QwO3ZhciBhdD0zRDA7dmFyIGFuPTNEMDt2YXIgYWg9M0QwO3ZhciBhdj0zRGZ1bmN0aW9uKD0K
YXksYXope2F3Lm1vdmVUbyhheSxheik7YXU9M0RheTthdD0zRGF6O2FuPTNEYXk7YWg9M0Rhen07
dmFyIGFqPTNEZnVuY3Rpb24oPQpheSxhRSl7dmFyIGFDPTNEYXcubGluZVdpZHRoO3ZhciBhQT0z
RGF5LWF1O3ZhciBhej0zRGFFLWF0O3ZhciBhQj0zRE1hdGguc3E9CnJ0KGFBKmFBK2F6KmF6KTtp
ZigoYUI+MCkmJihhQz4wKSl7YUEvPTNEYUI7YXovPTNEYUI7d2hpbGUodHJ1ZSl7dmFyIGFEPTNE
YT0KQyphcjtpZihhRDxhQil7YXUrPTNEYUQqYUE7YXQrPTNEYUQqYXo7aWYoKGFrJjEpPTNEPTNE
MCl7YXcubGluZVRvKGF1LGF0KX1lPQpsc2V7YXcubW92ZVRvKGF1LGF0KX1hQi09M0RhRDthaysr
O2lmKGFrPj0zRGFxLmxlbmd0aCl7YWs9M0QwfWFyPTNEYXFbYWtdfWU9CmxzZXthdT0zRGF5O2F0
PTNEYUU7aWYoKGFrJjEpPTNEPTNEMCl7YXcubGluZVRvKGF1LGF0KX1lbHNle2F3Lm1vdmVUbyhh
dSxhdD0KKX1hci09M0RhQi9hQzticmVha319fX07dmFyIGFpPTNEZnVuY3Rpb24oKXthdy5iZWdp
blBhdGgoKX07dmFyIGFtPTNEZnVuY3RpPQpvbigpe2FqKGFuLGFoKX07cmV0dXJue21vdmVUbzph
dixsaW5lVG86YWosYmVnaW5QYXRoOmFpLGNsb3NlUGF0aDphbX19O0wuanE9CnBsb3QuTGluZVJl
bmRlcmVyPTNEZnVuY3Rpb24oKXt0aGlzLnNoYXBlUmVuZGVyZXI9M0RuZXcgTC5qcXBsb3QuU2hh
cGVSZW5kZT0KcmVyKCk7dGhpcy5zaGFkb3dSZW5kZXJlcj0zRG5ldyBMLmpxcGxvdC5TaGFkb3dS
ZW5kZXJlcigpfTtMLmpxcGxvdC5MaW5lUmVuPQpkZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0
aW9uKGFpLGFuKXthaT0zRGFpfHx7fTt0aGlzLl90eXBlPTNEImxpbmUiO3RoaXM9Ci5yZW5kZXJl
ci5hbmltYXRpb249M0R7c2hvdzpmYWxzZSxkaXJlY3Rpb246ImxlZnQiLHNwZWVkOjI1MDAsX3N1
cHBvcnRlZDp0cj0KdWV9O3RoaXMucmVuZGVyZXIuc21vb3RoPTNEZmFsc2U7dGhpcy5yZW5kZXJl
ci50ZW5zaW9uPTNEbnVsbDt0aGlzLnJlbmRlcmVyPQouY29uc3RyYWluU21vb3RoaW5nPTNEdHJ1
ZTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZERhdGE9M0RbXTt0aGlzLnJlbmRlcmVyLl89CnNtb290
aGVkUGxvdERhdGE9M0RbXTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YT0zRFtdO3RoaXMu
cmVuZGVyZXIuX2xvdz0KQmFuZEdyaWREYXRhPTNEW107dGhpcy5yZW5kZXJlci5faGlCYW5kU21v
b3RoZWREYXRhPTNEW107dGhpcy5yZW5kZXJlci5fbG93PQpCYW5kU21vb3RoZWREYXRhPTNEW107
dGhpcy5yZW5kZXJlci5iYW5kRGF0YT0zRFtdO3RoaXMucmVuZGVyZXIuYmFuZHM9M0R7c2g9Cm93
OmZhbHNlLGhpRGF0YTpbXSxsb3dEYXRhOltdLGNvbG9yOnRoaXMuY29sb3Isc2hvd0xpbmVzOmZh
bHNlLGZpbGw6dHJ1ZSxmaT0KbGxDb2xvcjpudWxsLF9taW46bnVsbCxfbWF4Om51bGwsaW50ZXJ2
YWw6IjMlIn07dmFyIGFsPTNEe2hpZ2hsaWdodE1vdXNlT3ZlPQpyOmFpLmhpZ2hsaWdodE1vdXNl
T3ZlcixoaWdobGlnaHRNb3VzZURvd246YWkuaGlnaGxpZ2h0TW91c2VEb3duLGhpZ2hsaWdodEM9
Cm9sb3I6YWkuaGlnaGxpZ2h0Q29sb3J9O2RlbGV0ZSAoYWkuaGlnaGxpZ2h0TW91c2VPdmVyKTtk
ZWxldGUgKGFpLmhpZ2hsaWdodD0KTW91c2VEb3duKTtkZWxldGUgKGFpLmhpZ2hsaWdodENvbG9y
KTtMLmV4dGVuZCh0cnVlLHRoaXMucmVuZGVyZXIsYWkpO3RoaXMuPQpyZW5kZXJlci5vcHRpb25z
PTNEYWk7aWYodGhpcy5yZW5kZXJlci5iYW5kRGF0YS5sZW5ndGg+MSYmKCFhaS5iYW5kc3x8YWku
YmE9Cm5kcy5zaG93PTNEPTNEbnVsbCkpe3RoaXMucmVuZGVyZXIuYmFuZHMuc2hvdz0zRHRydWV9
ZWxzZXtpZihhaS5iYW5kcyYmYWkuYj0KYW5kcy5zaG93PTNEPTNEbnVsbCYmYWkuYmFuZHMuaW50
ZXJ2YWwhPTNEbnVsbCl7dGhpcy5yZW5kZXJlci5iYW5kcy5zaG93PTNEPQp0cnVlfX1pZih0aGlz
LmZpbGwpe3RoaXMucmVuZGVyZXIuYmFuZHMuc2hvdz0zRGZhbHNlfWlmKHRoaXMucmVuZGVyZXIu
YmFuZHM9Ci5zaG93KXt0aGlzLnJlbmRlcmVyLmluaXRCYW5kcy5jYWxsKHRoaXMsdGhpcy5yZW5k
ZXJlci5vcHRpb25zLGFuKX1pZih0aGlzLj0KX3N0YWNrKXt0aGlzLnJlbmRlcmVyLnNtb290aD0z
RGZhbHNlfXZhciBhbT0zRHtsaW5lSm9pbjp0aGlzLmxpbmVKb2luLGxpbmVDPQphcDp0aGlzLmxp
bmVDYXAsZmlsbDp0aGlzLmZpbGwsaXNhcmM6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5jb2xvcixm
aWxsU3R5bGU9Cjp0aGlzLmZpbGxDb2xvcixsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGgsbGluZVBh
dHRlcm46dGhpcy5saW5lUGF0dGVybixjbG9zZT0KUGF0aDp0aGlzLmZpbGx9O3RoaXMucmVuZGVy
ZXIuc2hhcGVSZW5kZXJlci5pbml0KGFtKTt2YXIgYWo9M0RhaS5zaGFkb3dPZmZzPQpldDtpZihh
aj0zRD0zRG51bGwpe2lmKHRoaXMubGluZVdpZHRoPjIuNSl7YWo9M0QxLjI1KigxKyhNYXRoLmF0
YW4oKHRoaXMubGk9Cm5lV2lkdGgvMi41KSkvMC43ODUzOTgxNjMtMSkqMC42KX1lbHNle2FqPTNE
MS4yNSpNYXRoLmF0YW4oKHRoaXMubGluZVdpZHRoLz0KMi41KSkvMC43ODUzOTgxNjN9fXZhciBh
aD0zRHtsaW5lSm9pbjp0aGlzLmxpbmVKb2luLGxpbmVDYXA6dGhpcy5saW5lQ2FwLGZpPQpsbDp0
aGlzLmZpbGwsaXNhcmM6ZmFsc2UsYW5nbGU6dGhpcy5zaGFkb3dBbmdsZSxvZmZzZXQ6YWosYWxw
aGE6dGhpcy5zaGFkb3c9CkFscGhhLGRlcHRoOnRoaXMuc2hhZG93RGVwdGgsbGluZVdpZHRoOnRo
aXMubGluZVdpZHRoLGxpbmVQYXR0ZXJuOnRoaXMubGluZT0KUGF0dGVybixjbG9zZVBhdGg6dGhp
cy5maWxsfTt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRlcmVyLmluaXQoYWgpO3RoaXMuX2FyPQpl
YVBvaW50cz0zRFtdO3RoaXMuX2JvdW5kaW5nQm94PTNEW1tdLFtdXTtpZighdGhpcy5pc1RyZW5k
bGluZSYmdGhpcy5maWxsfHw9CnRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdyl7dGhpcy5oaWdobGln
aHRNb3VzZU92ZXI9M0R0cnVlO3RoaXMuaGlnaGxpZ2h0TW91cz0KZURvd249M0RmYWxzZTt0aGlz
LmhpZ2hsaWdodENvbG9yPTNEbnVsbDtpZihhbC5oaWdobGlnaHRNb3VzZURvd24mJmFsLmhpZ2hs
PQppZ2h0TW91c2VPdmVyPTNEPTNEbnVsbCl7YWwuaGlnaGxpZ2h0TW91c2VPdmVyPTNEZmFsc2V9
TC5leHRlbmQodHJ1ZSx0aGlzLHs9CmhpZ2hsaWdodE1vdXNlT3ZlcjphbC5oaWdobGlnaHRNb3Vz
ZU92ZXIsaGlnaGxpZ2h0TW91c2VEb3duOmFsLmhpZ2hsaWdodE1vdT0Kc2VEb3duLGhpZ2hsaWdo
dENvbG9yOmFsLmhpZ2hsaWdodENvbG9yfSk7aWYoIXRoaXMuaGlnaGxpZ2h0Q29sb3Ipe3ZhciBh
az0KPTNEKHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdyk/dGhpcy5yZW5kZXJlci5iYW5kcy5maWxs
Q29sb3I6dGhpcy5maWxsQ29sb3I7PQp0aGlzLmhpZ2hsaWdodENvbG9yPTNETC5qcXBsb3QuY29t
cHV0ZUhpZ2hsaWdodENvbG9ycyhhayl9aWYodGhpcy5oaWdobGlnaHQ9CmVyKXt0aGlzLmhpZ2hs
aWdodGVyLnNob3c9M0RmYWxzZX19aWYoIXRoaXMuaXNUcmVuZGxpbmUmJmFuKXthbi5wbHVnaW5z
Lmxpbj0KZVJlbmRlcmVyPTNEe307YW4ucG9zdEluaXRIb29rcy5hZGRPbmNlKHopO2FuLnBvc3RE
cmF3SG9va3MuYWRkT25jZShhZik7YW4uPQpldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFw
bG90TW91c2VNb3ZlIixoKTthbi5ldmVudExpc3RlbmVySG9va3MuYWRkT249CmNlKCJqcXBsb3RN
b3VzZURvd24iLGUpO2FuLmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RNb3VzZVVw
IixhZCk7YT0Kbi5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90Q2xpY2siLGcpO2Fu
LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlPQooImpxcGxvdFJpZ2h0Q2xpY2siLHMpfX07TC5q
cXBsb3QuTGluZVJlbmRlcmVyLnByb3RvdHlwZS5pbml0QmFuZHM9M0RmdW5jdGk9Cm9uKGFrLGF2
KXt2YXIgYWw9M0Rhay5iYW5kRGF0YXx8W107dmFyIGFuPTNEdGhpcy5yZW5kZXJlci5iYW5kczth
bi5oaURhdGE9Cj0zRFtdO2FuLmxvd0RhdGE9M0RbXTt2YXIgYUI9M0R0aGlzLmRhdGE7YW4uX21h
eD0zRG51bGw7YW4uX21pbj0zRG51bGw7aWYoYT0KbC5sZW5ndGg9M0Q9M0QyKXtpZihMLmlzQXJy
YXkoYWxbMF1bMF0pKXt2YXIgYW87dmFyIGFoPTNEMCxhcj0zRDA7Zm9yKHZhciBhPQp3PTNEMCxh
dD0zRGFsWzBdLmxlbmd0aDthdzxhdDthdysrKXthbz0zRGFsWzBdW2F3XTtpZigoYW9bMV0hPTNE
bnVsbCYmYW9bMV09Cj5hbi5fbWF4KXx8YW4uX21heD0zRD0zRG51bGwpe2FuLl9tYXg9M0Rhb1sx
XX1pZigoYW9bMV0hPTNEbnVsbCYmYW9bMV08YW4uXz0KbWluKXx8YW4uX21pbj0zRD0zRG51bGwp
e2FuLl9taW49M0Rhb1sxXX19Zm9yKHZhciBhdz0zRDAsYXQ9M0RhbFsxXS5sZW5ndGg7PQphdzxh
dDthdysrKXthbz0zRGFsWzFdW2F3XTtpZigoYW9bMV0hPTNEbnVsbCYmYW9bMV0+YW4uX21heCl8
fGFuLl9tYXg9M0Q9M0Q9Cm51bGwpe2FuLl9tYXg9M0Rhb1sxXTthcj0zRDF9aWYoKGFvWzFdIT0z
RG51bGwmJmFvWzFdPGFuLl9taW4pfHxhbi5fbWluPTNEPQo9M0RudWxsKXthbi5fbWluPTNEYW9b
MV07YWg9M0QxfX1pZihhcj0zRD0zRD0zRGFoKXthbi5zaG93PTNEZmFsc2V9YW4uaGlEYXQ9CmE9
M0RhbFthcl07YW4ubG93RGF0YT0zRGFsW2FoXX1lbHNle2lmKGFsWzBdLmxlbmd0aD0zRD0zRD0z
RGFCLmxlbmd0aCYmYWxbMT0KXS5sZW5ndGg9M0Q9M0Q9M0RhQi5sZW5ndGgpe3ZhciBhaj0zRChh
bFswXVswXT5hbFsxXVswXSk/MDoxO3ZhciBhQz0zRChhaik/PQowOjE7Zm9yKHZhciBhdz0zRDAs
YXQ9M0RhQi5sZW5ndGg7YXc8YXQ7YXcrKyl7YW4uaGlEYXRhLnB1c2goW2FCW2F3XVswXSxhbFs9
CmFqXVthd11dKTthbi5sb3dEYXRhLnB1c2goW2FCW2F3XVswXSxhbFthQ11bYXddXSl9fWVsc2V7
YW4uc2hvdz0zRGZhbHNlfX19ZT0KbHNle2lmKGFsLmxlbmd0aD4yJiYhTC5pc0FycmF5KGFsWzBd
WzBdKSl7dmFyIGFqPTNEKGFsWzBdWzBdPmFsWzBdWzFdKT8wOjE7PQp2YXIgYUM9M0QoYWopPzA6
MTtmb3IodmFyIGF3PTNEMCxhdD0zRGFsLmxlbmd0aDthdzxhdDthdysrKXthbi5oaURhdGEucHVz
aCg9ClthQlthd11bMF0sYWxbYXddW2FqXV0pO2FuLmxvd0RhdGEucHVzaChbYUJbYXddWzBdLGFs
W2F3XVthQ11dKX19ZWxzZXt2YXIgYT0KcT0zRGFuLmludGVydmFsO3ZhciBhQT0zRG51bGw7dmFy
IGF6PTNEbnVsbDt2YXIgYWk9M0RudWxsO3ZhciBhdT0zRG51bGw7aWYoPQpMLmlzQXJyYXkoYXEp
KXthQT0zRGFxWzBdO2F6PTNEYXFbMV19ZWxzZXthQT0zRGFxfWlmKGlzTmFOKGFBKSl7aWYoYUEu
Y2hhckE9CnQoYUEubGVuZ3RoLTEpPTNEPTNEPTNEIiUiKXthaT0zRCJtdWx0aXBseSI7YUE9M0Rw
YXJzZUZsb2F0KGFBKS8xMDArMX19ZWxzZT0Ke2FBPTNEcGFyc2VGbG9hdChhQSk7YWk9M0QiYWRk
In1pZihheiE9M0Q9M0RudWxsJiZpc05hTihheikpe2lmKGF6LmNoYXJBdChhPQp6Lmxlbmd0aC0x
KT0zRD0zRD0zRCIlIil7YXU9M0QibXVsdGlwbHkiO2F6PTNEcGFyc2VGbG9hdChheikvMTAwKzF9
fWVsc2V7aWY9CihheiE9M0Q9M0RudWxsKXthej0zRHBhcnNlRmxvYXQoYXopO2F1PTNEImFkZCJ9
fWlmKGFBIT0zRD0zRG51bGwpe2lmKGF6PTNEPQo9M0Q9M0RudWxsKXthej0zRC1hQTthdT0zRGFp
O2lmKGF1PTNEPTNEPTNEIm11bHRpcGx5Iil7YXorPTNEMn19aWYoYUE8YXope3Y9CmFyIGF4PTNE
YUE7YUE9M0Rhejthej0zRGF4O2F4PTNEYWk7YWk9M0RhdTthdT0zRGF4fWZvcih2YXIgYXc9M0Qw
LGF0PTNEYUIubD0KZW5ndGg7YXc8YXQ7YXcrKyl7c3dpdGNoKGFpKXtjYXNlImFkZCI6YW4uaGlE
YXRhLnB1c2goW2FCW2F3XVswXSxhQlthd11bMV0rPQphQV0pO2JyZWFrO2Nhc2UibXVsdGlwbHki
OmFuLmhpRGF0YS5wdXNoKFthQlthd11bMF0sYUJbYXddWzFdKmFBXSk7YnJlYWt9c3c9Cml0Y2go
YXUpe2Nhc2UiYWRkIjphbi5sb3dEYXRhLnB1c2goW2FCW2F3XVswXSxhQlthd11bMV0rYXpdKTti
cmVhaztjYXNlIm11bD0KdGlwbHkiOmFuLmxvd0RhdGEucHVzaChbYUJbYXddWzBdLGFCW2F3XVsx
XSphel0pO2JyZWFrfX19ZWxzZXthbi5zaG93PTNEZmFsPQpzZX19fXZhciBhbT0zRGFuLmhpRGF0
YTt2YXIgYXA9M0Rhbi5sb3dEYXRhO2Zvcih2YXIgYXc9M0QwLGF0PTNEYW0ubGVuZ3RoO2E9Cnc8
YXQ7YXcrKyl7aWYoKGFtW2F3XVsxXSE9M0RudWxsJiZhbVthd11bMV0+YW4uX21heCl8fGFuLl9t
YXg9M0Q9M0RudWxsKXthbj0KLl9tYXg9M0RhbVthd11bMV19fWZvcih2YXIgYXc9M0QwLGF0PTNE
YXAubGVuZ3RoO2F3PGF0O2F3Kyspe2lmKChhcFthd11bMV0hPQo9M0RudWxsJiZhcFthd11bMV08
YW4uX21pbil8fGFuLl9taW49M0Q9M0RudWxsKXthbi5fbWluPTNEYXBbYXddWzFdfX1pZihhbi49
CmZpbGxDb2xvcj0zRD0zRD0zRG51bGwpe3ZhciBheT0zREwuanFwbG90LmdldENvbG9yQ29tcG9u
ZW50cyhhbi5jb2xvcik7YXlbMz0KXT0zRGF5WzNdKjAuNTthbi5maWxsQ29sb3I9M0QicmdiYSgi
K2F5WzBdKyIsICIrYXlbMV0rIiwgIitheVsyXSsiLCAiK2F5WzNdPQorIikifX07ZnVuY3Rpb24g
SyhhaSxhaCl7cmV0dXJuKDMuNDE4MjA1NCthaCkqTWF0aC5wb3coYWksLTAuMzUzNDk5Mil9ZnVu
Y3Q9CmlvbiBuKGFqLGFpKXt2YXIgYWg9M0RNYXRoLnNxcnQoTWF0aC5wb3coKGFpWzBdLWFqWzBd
KSwyKStNYXRoLnBvdygoYWlbMV0tYT0KalsxXSksMikpO3JldHVybiA1Ljc2NDgqTWF0aC5sb2co
YWgpKzcuNDQ1Nn1mdW5jdGlvbiBBKGFoKXt2YXIgYWk9M0QoTWF0aC5lPQp4cCgyKmFoKS0xKS8o
TWF0aC5leHAoMiphaCkrMSk7cmV0dXJuIGFpfWZ1bmN0aW9uIEooYUope3ZhciBhdD0zRHRoaXMu
cmVuZGU9CnJlci5zbW9vdGg7dmFyIGFEPTNEdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTt2YXIgYW49
M0R0aGlzLl94YXhpcy5zZXJpZXNfcDJ1Oz0KdmFyIGFHPTNEdGhpcy5feWF4aXMuc2VyaWVzX3Ay
dTt2YXIgYUY9M0RudWxsO3ZhciBhbT0zRG51bGw7dmFyIGF6PTNEYUoubGVuPQpndGgvYUQ7dmFy
IGFqPTNEW107dmFyIGF5PTNEW107aWYoIWlzTmFOKHBhcnNlRmxvYXQoYXQpKSl7YUY9M0RwYXJz
ZUZsb2F0KGE9CnQpfWVsc2V7YUY9M0RLKGF6LDAuNSl9dmFyIGF3PTNEW107dmFyIGFrPTNEW107
Zm9yKHZhciBhRT0zRDAsYUE9M0RhSi5sZW5ndD0KaDthRTxhQTthRSsrKXthdy5wdXNoKGFKW2FF
XVsxXSk7YWsucHVzaChhSlthRV1bMF0pfWZ1bmN0aW9uIGF2KGFLLGFMKXtpZihhPQpLLWFMPTNE
PTNEMCl7cmV0dXJuIE1hdGgucG93KDEwLDEwKX1lbHNle3JldHVybiBhSy1hTH19dmFyIGF4LGFy
LGFxLGFwO3ZhciA9CmFoPTNEYUoubGVuZ3RoLTE7Zm9yKHZhciBhbD0zRDEsYUI9M0RhSi5sZW5n
dGg7YWw8YUI7YWwrKyl7dmFyIGFpPTNEW107dmFyID0KYXU9M0RbXTtmb3IodmFyIGFDPTNEMDth
QzwyO2FDKyspe3ZhciBhRT0zRGFsLTErYUM7aWYoYUU9M0Q9M0QwfHxhRT0zRD0zRGFoPQope2Fp
W2FDXT0zRE1hdGgucG93KDEwLDEwKX1lbHNle2lmKGF3W2FFKzFdLWF3W2FFXT0zRD0zRDB8fGF3
W2FFXS1hd1thRS0xXT0KPTNEPTNEMCl7YWlbYUNdPTNEMH1lbHNle2lmKCgoYWtbYUUrMV0tYWtb
YUVdKS8oYXdbYUUrMV0tYXdbYUVdKSsoYWtbYUVdLWFrPQpbYUUtMV0pLyhhd1thRV0tYXdbYUUt
MV0pKT0zRD0zRDApe2FpW2FDXT0zRDB9ZWxzZXtpZigoYXdbYUUrMV0tYXdbYUVdKSooYXc9Clth
RV0tYXdbYUUtMV0pPDApe2FpW2FDXT0zRDB9ZWxzZXthaVthQ109M0QyLyhhdihha1thRSsxXSxh
a1thRV0pLyhhd1thRSsxXT0KLWF3W2FFXSkrYXYoYWtbYUVdLGFrW2FFLTFdKS8oYXdbYUVdLWF3
W2FFLTFdKSl9fX19fWlmKGFsPTNEPTNEMSl7YWlbMF09M0QzPQovMiooYXdbMV0tYXdbMF0pL2F2
KGFrWzFdLGFrWzBdKS1haVsxXS8yfWVsc2V7aWYoYWw9M0Q9M0RhaCl7YWlbMV09M0QzLzIqKGE9
CndbYWhdLWF3W2FoLTFdKS9hdihha1thaF0sYWtbYWgtMV0pLWFpWzBdLzJ9fWF1WzBdPTNELTIq
KGFpWzFdKzIqYWlbMF0pL2F2KD0KYWtbYWxdLGFrW2FsLTFdKSs2Kihhd1thbF0tYXdbYWwtMV0p
L01hdGgucG93KGF2KGFrW2FsXSxha1thbC0xXSksMik7YXVbMV09Cj0zRDIqKDIqYWlbMV0rYWlb
MF0pL2F2KGFrW2FsXSxha1thbC0xXSktNiooYXdbYWxdLWF3W2FsLTFdKS9NYXRoLnBvdyhhdihh
az0KW2FsXSxha1thbC0xXSksMik7YXA9M0QxLzYqKGF1WzFdLWF1WzBdKS9hdihha1thbF0sYWtb
YWwtMV0pO2FxPTNEMS8yKihha1thPQpsXSphdVswXS1ha1thbC0xXSphdVsxXSkvYXYoYWtbYWxd
LGFrW2FsLTFdKTthcj0zRChhd1thbF0tYXdbYWwtMV0tYXEqKE1hdGg9Ci5wb3coYWtbYWxdLDIp
LU1hdGgucG93KGFrW2FsLTFdLDIpKS1hcCooTWF0aC5wb3coYWtbYWxdLDMpLU1hdGgucG93KGFr
W2FsLT0KMV0sMykpKS9hdihha1thbF0sYWtbYWwtMV0pO2F4PTNEYXdbYWwtMV0tYXIqYWtbYWwt
MV0tYXEqTWF0aC5wb3coYWtbYWwtMV0sPQoyKS1hcCpNYXRoLnBvdyhha1thbC0xXSwzKTt2YXIg
YUk9M0QoYWtbYWxdLWFrW2FsLTFdKS9hRjt2YXIgYUgsYW87Zm9yKHZhciA9CmFDPTNEMCxhQT0z
RGFGO2FDPGFBO2FDKyspe2FIPTNEW107YW89M0Rha1thbC0xXSthQyphSTthSC5wdXNoKGFvKTth
SC5wdXNoKD0KYXgrYXIqYW8rYXEqTWF0aC5wb3coYW8sMikrYXAqTWF0aC5wb3coYW8sMykpO2Fq
LnB1c2goYUgpO2F5LnB1c2goW2FuKGFIWzBdPQopLGFHKGFIWzFdKV0pfX1hai5wdXNoKGFKW2FF
XSk7YXkucHVzaChbYW4oYUpbYUVdWzBdKSxhRyhhSlthRV1bMV0pXSk7cmV0dXI9Cm5bYWosYXld
fWZ1bmN0aW9uIEYoYXApe3ZhciBhbz0zRHRoaXMucmVuZGVyZXIuc21vb3RoO3ZhciBhVT0zRHRo
aXMucmVuZGVyZT0Kci50ZW5zaW9uO3ZhciBhaD0zRHRoaXMuY2FudmFzLmdldFdpZHRoKCk7dmFy
IGFIPTNEdGhpcy5feGF4aXMuc2VyaWVzX3AydTt2PQphciBhcT0zRHRoaXMuX3lheGlzLnNlcmll
c19wMnU7dmFyIGFJPTNEbnVsbDt2YXIgYUo9M0RudWxsO3ZhciBhVD0zRG51bGw7dmE9CnIgYU89
M0RudWxsO3ZhciBhTT0zRG51bGw7dmFyIGF0PTNEbnVsbDt2YXIgYVI9M0RudWxsO3ZhciBhbT0z
RG51bGw7dmFyIGFLLD0KYUwsYUQsYUMsYUEsYXk7dmFyIGFrLGFpLGF2LGF1O3ZhciBhQixheixh
Tjt2YXIgYXc9M0RbXTt2YXIgYWo9M0RbXTt2YXIgYWw9Cj0zRGFwLmxlbmd0aC9haDt2YXIgYVMs
YXgsYUYsYUcsYUU7dmFyIGFyPTNEW107dmFyIGFuPTNEW107aWYoIWlzTmFOKHBhcnNlRj0KbG9h
dChhbykpKXthST0zRHBhcnNlRmxvYXQoYW8pfWVsc2V7YUk9M0RLKGFsLDAuNSl9aWYoIWlzTmFO
KHBhcnNlRmxvYXQoYVUpPQopKXthVT0zRHBhcnNlRmxvYXQoYVUpfWZvcih2YXIgYVE9M0QwLGFQ
PTNEYXAubGVuZ3RoLTE7YVE8YVA7YVErKyl7aWYoYVU9M0Q9Cj0zRD0zRG51bGwpe2F0PTNETWF0
aC5hYnMoKGFwW2FRKzFdWzFdLWFwW2FRXVsxXSkvKGFwW2FRKzFdWzBdLWFwW2FRXVswXSkpOz0K
YVM9M0QwLjM7YXg9M0QwLjY7YUY9M0QoYXgtYVMpLzI7YUc9M0QyLjU7YUU9M0QtMS40O2FtPTNE
YXQvYUcrYUU7YU89M0RhRipBPQooYW0pLWFGKkEoYUUpK2FTO2lmKGFRPjApe2FSPTNETWF0aC5h
YnMoKGFwW2FRXVsxXS1hcFthUS0xXVsxXSkvKGFwW2FRXVswXS09CmFwW2FRLTFdWzBdKSl9YW09
M0RhUi9hRythRTthTT0zRGFGKkEoYW0pLWFGKkEoYUUpK2FTO2FUPTNEKGFPK2FNKS8yfWVsc2V7
YT0KVD0zRGFVfWZvcihhSz0zRDA7YUs8YUk7YUsrKyl7YUw9M0RhSy9hSTthRD0zRCgxKzIqYUwp
Kk1hdGgucG93KCgxLWFMKSwyKTthPQpDPTNEYUwqTWF0aC5wb3coKDEtYUwpLDIpO2FBPTNETWF0
aC5wb3coYUwsMikqKDMtMiphTCk7YXk9M0RNYXRoLnBvdyhhTCwyKSo9CihhTC0xKTtpZihhcFth
US0xXSl7YWs9M0RhVCooYXBbYVErMV1bMF0tYXBbYVEtMV1bMF0pO2FpPTNEYVQqKGFwW2FRKzFd
WzFdLT0KYXBbYVEtMV1bMV0pfWVsc2V7YWs9M0RhVCooYXBbYVErMV1bMF0tYXBbYVFdWzBdKTth
aT0zRGFUKihhcFthUSsxXVsxXS1hcFthPQpRXVsxXSl9aWYoYXBbYVErMl0pe2F2PTNEYVQqKGFw
W2FRKzJdWzBdLWFwW2FRXVswXSk7YXU9M0RhVCooYXBbYVErMl1bMV0tYXA9ClthUV1bMV0pfWVs
c2V7YXY9M0RhVCooYXBbYVErMV1bMF0tYXBbYVFdWzBdKTthdT0zRGFUKihhcFthUSsxXVsxXS1h
cFthUV1bMT0KXSl9YUI9M0RhRCphcFthUV1bMF0rYUEqYXBbYVErMV1bMF0rYUMqYWsrYXkqYXY7
YXo9M0RhRCphcFthUV1bMV0rYUEqYXBbYVErPQoxXVsxXSthQyphaStheSphdTthTj0zRFthQixh
el07YXIucHVzaChhTik7YW4ucHVzaChbYUgoYUIpLGFxKGF6KV0pfX1hci5wdXM9CmgoYXBbYVBd
KTthbi5wdXNoKFthSChhcFthUF1bMF0pLGFxKGFwW2FQXVsxXSldKTtyZXR1cm5bYXIsYW5dfUwu
anFwbG90Lkxpbj0KZVJlbmRlcmVyLnByb3RvdHlwZS5zZXRHcmlkRGF0YT0zRGZ1bmN0aW9uKGFw
KXt2YXIgYWw9M0R0aGlzLl94YXhpcy5zZXJpZXNfPQp1MnA7dmFyIGFoPTNEdGhpcy5feWF4aXMu
c2VyaWVzX3UycDt2YXIgYW09M0R0aGlzLl9wbG90RGF0YTt2YXIgYXE9M0R0aGlzLl89CnByZXZQ
bG90RGF0YTt0aGlzLmdyaWREYXRhPTNEW107dGhpcy5fcHJldkdyaWREYXRhPTNEW107dGhpcy5y
ZW5kZXJlci5fc21vbz0KdGhlZERhdGE9M0RbXTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZFBsb3RE
YXRhPTNEW107dGhpcy5yZW5kZXJlci5faGlCYW5kR3JpPQpkRGF0YT0zRFtdO3RoaXMucmVuZGVy
ZXIuX2xvd0JhbmRHcmlkRGF0YT0zRFtdO3RoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGU9CmRE
YXRhPTNEW107dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YT0zRFtdO3ZhciBhaz0z
RHRoaXMucmVuZGVyZXIuYj0KYW5kczt2YXIgYWk9M0RmYWxzZTtmb3IodmFyIGFuPTNEMCxhaj0z
RGFtLmxlbmd0aDthbjxhajthbisrKXtpZihhbVthbl1bMF0hPQo9M0RudWxsJiZhbVthbl1bMV0h
PTNEbnVsbCl7dGhpcy5ncmlkRGF0YS5wdXNoKFthbC5jYWxsKHRoaXMuX3hheGlzLGFtW2FuXVs9
CjBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFtW2FuXVsxXSldKX1lbHNle2lmKGFtW2FuXVswXT0z
RD0zRG51bGwpe2FpPTNEdHJ1ZT0KO3RoaXMuZ3JpZERhdGEucHVzaChbbnVsbCxhaC5jYWxsKHRo
aXMuX3lheGlzLGFtW2FuXVsxXSldKX1lbHNle2lmKGFtW2FuXVsxPQpdPTNEPTNEbnVsbCl7YWk9
M0R0cnVlO3RoaXMuZ3JpZERhdGEucHVzaChbYWwuY2FsbCh0aGlzLl94YXhpcyxhbVthbl1bMF0p
LG49CnVsbF0pfX19aWYoYXFbYW5dIT0zRG51bGwmJmFxW2FuXVswXSE9M0RudWxsJiZhcVthbl1b
MV0hPTNEbnVsbCl7dGhpcy5fcHJldj0KR3JpZERhdGEucHVzaChbYWwuY2FsbCh0aGlzLl94YXhp
cyxhcVthbl1bMF0pLGFoLmNhbGwodGhpcy5feWF4aXMsYXFbYW5dWzFdPQopXSl9ZWxzZXtpZihh
cVthbl0hPTNEbnVsbCYmYXFbYW5dWzBdPTNEPTNEbnVsbCl7dGhpcy5fcHJldkdyaWREYXRhLnB1
c2goW249CnVsbCxhaC5jYWxsKHRoaXMuX3lheGlzLGFxW2FuXVsxXSldKX1lbHNle2lmKGFxW2Fu
XSE9M0RudWxsJiZhcVthbl1bMF0hPTNEbj0KdWxsJiZhcVthbl1bMV09M0Q9M0RudWxsKXt0aGlz
Ll9wcmV2R3JpZERhdGEucHVzaChbYWwuY2FsbCh0aGlzLl94YXhpcyxhcVthPQpuXVswXSksbnVs
bF0pfX19fWlmKGFpKXt0aGlzLnJlbmRlcmVyLnNtb290aD0zRGZhbHNlO2lmKHRoaXMuX3R5cGU9
M0Q9M0Q9M0Q9CiJsaW5lIil7YWsuc2hvdz0zRGZhbHNlfX1pZih0aGlzLl90eXBlPTNEPTNEPTNE
ImxpbmUiJiZhay5zaG93KXtmb3IodmFyIGFuPQo9M0QwLGFqPTNEYWsuaGlEYXRhLmxlbmd0aDth
bjxhajthbisrKXt0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YS5wdXNoKFs9CmFsLmNhbGwo
dGhpcy5feGF4aXMsYWsuaGlEYXRhW2FuXVswXSksYWguY2FsbCh0aGlzLl95YXhpcyxhay5oaURh
dGFbYW5dWzFdKT0KXSl9Zm9yKHZhciBhbj0zRDAsYWo9M0Rhay5sb3dEYXRhLmxlbmd0aDthbjxh
ajthbisrKXt0aGlzLnJlbmRlcmVyLl9sb3dCYW5kPQpHcmlkRGF0YS5wdXNoKFthbC5jYWxsKHRo
aXMuX3hheGlzLGFrLmxvd0RhdGFbYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGE9CmsubG93
RGF0YVthbl1bMV0pXSl9fWlmKHRoaXMuX3R5cGU9M0Q9M0Q9M0QibGluZSImJnRoaXMucmVuZGVy
ZXIuc21vb3RoJiZ0aD0KaXMuZ3JpZERhdGEubGVuZ3RoPjIpe3ZhciBhbztpZih0aGlzLnJlbmRl
cmVyLmNvbnN0cmFpblNtb290aGluZyl7YW89M0RKLmNhPQpsbCh0aGlzLHRoaXMuZ3JpZERhdGEp
O3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0YT0zRGFvWzBdO3RoaXMucmVuZGVyZXIuX3M9Cm1v
b3RoZWRQbG90RGF0YT0zRGFvWzFdO2lmKGFrLnNob3cpe2FvPTNESi5jYWxsKHRoaXMsdGhpcy5y
ZW5kZXJlci5faGlCYW5kRz0KcmlkRGF0YSk7dGhpcy5yZW5kZXJlci5faGlCYW5kU21vb3RoZWRE
YXRhPTNEYW9bMF07YW89M0RKLmNhbGwodGhpcyx0aGlzLnJlPQpuZGVyZXIuX2xvd0JhbmRHcmlk
RGF0YSk7dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtb290aGVkRGF0YT0zRGFvWzBdfWFvPTNEbnU9
CmxsfWVsc2V7YW89M0RGLmNhbGwodGhpcyx0aGlzLmdyaWREYXRhKTt0aGlzLnJlbmRlcmVyLl9z
bW9vdGhlZERhdGE9M0Rhb1swXT0KO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGE9M0Rh
b1sxXTtpZihhay5zaG93KXthbz0zREYuY2FsbCh0aGlzLHRoaXMuPQpyZW5kZXJlci5faGlCYW5k
R3JpZERhdGEpO3RoaXMucmVuZGVyZXIuX2hpQmFuZFNtb290aGVkRGF0YT0zRGFvWzBdO2FvPTNE
Ri49CmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyLl9sb3dCYW5kR3JpZERhdGEpO3RoaXMucmVuZGVy
ZXIuX2xvd0JhbmRTbW9vdGhlZERhdD0KYT0zRGFvWzBdfWFvPTNEbnVsbH19fTtMLmpxcGxvdC5M
aW5lUmVuZGVyZXIucHJvdG90eXBlLm1ha2VHcmlkRGF0YT0zRGZ1bmN0PQppb24oYW8sYXEpe3Zh
ciBhbT0zRHRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIGFoPTNEdGhpcy5feWF4aXMuc2VyaWVz
X3UycDs9CnZhciBhcj0zRFtdO3ZhciBhaj0zRFtdO3RoaXMucmVuZGVyZXIuX3Ntb290aGVkRGF0
YT0zRFtdO3RoaXMucmVuZGVyZXIuX3Ntbz0Kb3RoZWRQbG90RGF0YT0zRFtdO3RoaXMucmVuZGVy
ZXIuX2hpQmFuZEdyaWREYXRhPTNEW107dGhpcy5yZW5kZXJlci5fbG93QmFuPQpkR3JpZERhdGE9
M0RbXTt0aGlzLnJlbmRlcmVyLl9oaUJhbmRTbW9vdGhlZERhdGE9M0RbXTt0aGlzLnJlbmRlcmVy
Ll9sb3dCYW49CmRTbW9vdGhlZERhdGE9M0RbXTt2YXIgYWw9M0R0aGlzLnJlbmRlcmVyLmJhbmRz
O3ZhciBhaT0zRGZhbHNlO2Zvcih2YXIgYW49Cj0zRDA7YW48YW8ubGVuZ3RoO2FuKyspe2lmKGFv
W2FuXVswXSE9M0RudWxsJiZhb1thbl1bMV0hPTNEbnVsbCl7YXIucHVzaChbYT0KbS5jYWxsKHRo
aXMuX3hheGlzLGFvW2FuXVswXSksYWguY2FsbCh0aGlzLl95YXhpcyxhb1thbl1bMV0pXSl9ZWxz
ZXtpZihhb1thPQpuXVswXT0zRD0zRG51bGwpe2FpPTNEdHJ1ZTthci5wdXNoKFtudWxsLGFoLmNh
bGwodGhpcy5feWF4aXMsYW9bYW5dWzFdKV0pfWU9CmxzZXtpZihhb1thbl1bMV09M0Q9M0RudWxs
KXthaT0zRHRydWU7YXIucHVzaChbYW0uY2FsbCh0aGlzLl94YXhpcyxhb1thbl1bMD0KXSksbnVs
bF0pfX19fWlmKGFpKXt0aGlzLnJlbmRlcmVyLnNtb290aD0zRGZhbHNlO2lmKHRoaXMuX3R5cGU9
M0Q9M0Q9M0QibGluPQplIil7YWwuc2hvdz0zRGZhbHNlfX1pZih0aGlzLl90eXBlPTNEPTNEPTNE
ImxpbmUiJiZhbC5zaG93KXtmb3IodmFyIGFuPTNEMCw9CmFrPTNEYWwuaGlEYXRhLmxlbmd0aDth
bjxhazthbisrKXt0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YS5wdXNoKFthbS5jYT0KbGwo
dGhpcy5feGF4aXMsYWwuaGlEYXRhW2FuXVswXSksYWguY2FsbCh0aGlzLl95YXhpcyxhbC5oaURh
dGFbYW5dWzFdKV0pfWZvPQpyKHZhciBhbj0zRDAsYWs9M0RhbC5sb3dEYXRhLmxlbmd0aDthbjxh
azthbisrKXt0aGlzLnJlbmRlcmVyLl9sb3dCYW5kR3JpZEQ9CmF0YS5wdXNoKFthbS5jYWxsKHRo
aXMuX3hheGlzLGFsLmxvd0RhdGFbYW5dWzBdKSxhaC5jYWxsKHRoaXMuX3lheGlzLGFsLmxvdz0K
RGF0YVthbl1bMV0pXSl9fWlmKHRoaXMuX3R5cGU9M0Q9M0Q9M0QibGluZSImJnRoaXMucmVuZGVy
ZXIuc21vb3RoJiZhci5sZW5nPQp0aD4yKXt2YXIgYXA7aWYodGhpcy5yZW5kZXJlci5jb25zdHJh
aW5TbW9vdGhpbmcpe2FwPTNESi5jYWxsKHRoaXMsYXIpO3RoaXM9Ci5yZW5kZXJlci5fc21vb3Ro
ZWREYXRhPTNEYXBbMF07dGhpcy5yZW5kZXJlci5fc21vb3RoZWRQbG90RGF0YT0zRGFwWzFdO2lm
KD0KYWwuc2hvdyl7YXA9M0RKLmNhbGwodGhpcyx0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0
YSk7dGhpcy5yZW5kZXJlci5faGlCPQphbmRTbW9vdGhlZERhdGE9M0RhcFswXTthcD0zREouY2Fs
bCh0aGlzLHRoaXMucmVuZGVyZXIuX2xvd0JhbmRHcmlkRGF0YSk7dGg9CmlzLnJlbmRlcmVyLl9s
b3dCYW5kU21vb3RoZWREYXRhPTNEYXBbMF19YXA9M0RudWxsfWVsc2V7YXA9M0RGLmNhbGwodGhp
cyxhcj0KKTt0aGlzLnJlbmRlcmVyLl9zbW9vdGhlZERhdGE9M0RhcFswXTt0aGlzLnJlbmRlcmVy
Ll9zbW9vdGhlZFBsb3REYXRhPTNEYXBbPQoxXTtpZihhbC5zaG93KXthcD0zREYuY2FsbCh0aGlz
LHRoaXMucmVuZGVyZXIuX2hpQmFuZEdyaWREYXRhKTt0aGlzLnJlbmRlcmU9CnIuX2hpQmFuZFNt
b290aGVkRGF0YT0zRGFwWzBdO2FwPTNERi5jYWxsKHRoaXMsdGhpcy5yZW5kZXJlci5fbG93QmFu
ZEdyaWREYT0KdGEpO3RoaXMucmVuZGVyZXIuX2xvd0JhbmRTbW9vdGhlZERhdGE9M0RhcFswXX1h
cD0zRG51bGx9fXJldHVybiBhcn07TC5qcXBsPQpvdC5MaW5lUmVuZGVyZXIucHJvdG90eXBlLmRy
YXc9M0RmdW5jdGlvbihheCxhSSxhaSxhQil7dmFyIGFDO3ZhciBhcT0zREwuZXg9CnRlbmQodHJ1
ZSx7fSxhaSk7dmFyIGFrPTNEKGFxLnNoYWRvdyE9M0R1KT9hcS5zaGFkb3c6dGhpcy5zaGFkb3c7
dmFyIGFKPTNEKD0KYXEuc2hvd0xpbmUhPTNEdSk/YXEuc2hvd0xpbmU6dGhpcy5zaG93TGluZTt2
YXIgYUE9M0QoYXEuZmlsbCE9M0R1KT9hcS5maWxsPQo6dGhpcy5maWxsO3ZhciBhaD0zRChhcS5m
aWxsQW5kU3Ryb2tlIT0zRHUpP2FxLmZpbGxBbmRTdHJva2U6dGhpcy5maWxsQW5kU3Q9CnJva2U7
dmFyIGFyLGF5LGF2LGFFO2F4LnNhdmUoKTtpZihhSS5sZW5ndGgpe2lmKGFKKXtpZihhQSl7aWYo
dGhpcy5maWxsVG9aZT0Kcm8pe3ZhciBhRj0zRHRoaXMubmVnYXRpdmVDb2xvcjtpZighdGhpcy51
c2VOZWdhdGl2ZUNvbG9ycyl7YUY9M0RhcS5maWxsU3R5PQpsZX12YXIgYW89M0RmYWxzZTt2YXIg
YXA9M0RhcS5maWxsU3R5bGU7aWYoYWgpe3ZhciBhSD0zRGFJLnNsaWNlKDApfWlmKHRoaXM9Ci5p
bmRleD0zRD0zRDB8fCF0aGlzLl9zdGFjayl7dmFyIGF3PTNEW107dmFyIGFMPTNEKHRoaXMucmVu
ZGVyZXIuc21vb3RoKT90aD0KaXMucmVuZGVyZXIuX3Ntb290aGVkUGxvdERhdGE6dGhpcy5fcGxv
dERhdGE7dGhpcy5fYXJlYVBvaW50cz0zRFtdO3ZhciBhRz0KPTNEdGhpcy5feWF4aXMuc2VyaWVz
X3UycCh0aGlzLmZpbGxUb1ZhbHVlKTt2YXIgYWo9M0R0aGlzLl94YXhpcy5zZXJpZXNfdTJwPQoo
dGhpcy5maWxsVG9WYWx1ZSk7YXEuY2xvc2VQYXRoPTNEdHJ1ZTtpZih0aGlzLmZpbGxBeGlzPTNE
PTNEInkiKXthdy5wdXNoKFs9CmFJWzBdWzBdLGFHXSk7dGhpcy5fYXJlYVBvaW50cy5wdXNoKFth
SVswXVswXSxhR10pO2Zvcih2YXIgYUM9M0QwO2FDPGFJLmxlbj0KZ3RoLTE7YUMrKyl7YXcucHVz
aChhSVthQ10pO3RoaXMuX2FyZWFQb2ludHMucHVzaChhSVthQ10pO2lmKGFMW2FDXVsxXSphTFth
PQpDKzFdWzFdPD0zRDApe2lmKGFMW2FDXVsxXTwwKXthbz0zRHRydWU7YXEuZmlsbFN0eWxlPTNE
YUZ9ZWxzZXthbz0zRGZhbHNlO2E9CnEuZmlsbFN0eWxlPTNEYXB9dmFyIGFuPTNEYUlbYUNdWzBd
KyhhSVthQysxXVswXS1hSVthQ11bMF0pKihhRy1hSVthQ11bMV0pLz0KKGFJW2FDKzFdWzFdLWFJ
W2FDXVsxXSk7YXcucHVzaChbYW4sYUddKTt0aGlzLl9hcmVhUG9pbnRzLnB1c2goW2FuLGFHXSk7
aWYoPQphayl7dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KGF4LGF3LGFxKX10aGlz
LnJlbmRlcmVyLnNoYXBlUmVuZGVyZXI9Ci5kcmF3KGF4LGF3LGFxKTthdz0zRFtbYW4sYUddXX19
aWYoYUxbYUkubGVuZ3RoLTFdWzFdPDApe2FvPTNEdHJ1ZTthcS5maWxsUz0KdHlsZT0zRGFGfWVs
c2V7YW89M0RmYWxzZTthcS5maWxsU3R5bGU9M0RhcH1hdy5wdXNoKGFJW2FJLmxlbmd0aC0xXSk7
dGhpcy5fPQphcmVhUG9pbnRzLnB1c2goYUlbYUkubGVuZ3RoLTFdKTthdy5wdXNoKFthSVthSS5s
ZW5ndGgtMV1bMF0sYUddKTt0aGlzLl9hcmU9CmFQb2ludHMucHVzaChbYUlbYUkubGVuZ3RoLTFd
WzBdLGFHXSl9aWYoYWspe3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZD0KcmF3KGF4LGF3
LGFxKX10aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyhheCxhdyxhcSl9ZWxzZXt2YXIg
YXU9M0R0aGlzPQouX3ByZXZHcmlkRGF0YTtmb3IodmFyIGFDPTNEYXUubGVuZ3RoO2FDPjA7YUMt
LSl7YUkucHVzaChhdVthQy0xXSl9aWYoYWspe3Q9Cmhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJl
ci5kcmF3KGF4LGFJLGFxKX10aGlzLl9hcmVhUG9pbnRzPTNEYUk7dGhpcy5yZW5kZT0KcmVyLnNo
YXBlUmVuZGVyZXIuZHJhdyhheCxhSSxhcSl9fWVsc2V7aWYoYWgpe3ZhciBhSD0zRGFJLnNsaWNl
KDApfWlmKHRoaXMuPQppbmRleD0zRD0zRDB8fCF0aGlzLl9zdGFjayl7dmFyIGFsPTNEYXguY2Fu
dmFzLmhlaWdodDthSS51bnNoaWZ0KFthSVswXVswXSw9CmFsXSk7dmFyIGFEPTNEYUkubGVuZ3Ro
O2FJLnB1c2goW2FJW2FELTFdWzBdLGFsXSl9ZWxzZXt2YXIgYXU9M0R0aGlzLl9wcmV2Rz0Kcmlk
RGF0YTtmb3IodmFyIGFDPTNEYXUubGVuZ3RoO2FDPjA7YUMtLSl7YUkucHVzaChhdVthQy0xXSl9
fXRoaXMuX2FyZWFQb2luPQp0cz0zRGFJO2lmKGFrKXt0aGlzLnJlbmRlcmVyLnNoYWRvd1JlbmRl
cmVyLmRyYXcoYXgsYUksYXEpfXRoaXMucmVuZGVyZXIuc2g9CmFwZVJlbmRlcmVyLmRyYXcoYXgs
YUksYXEpfWlmKGFoKXt2YXIgYXo9M0RMLmV4dGVuZCh0cnVlLHt9LGFxLHtmaWxsOmZhbHNlLD0K
Y2xvc2VQYXRoOmZhbHNlfSk7dGhpcy5yZW5kZXJlci5zaGFwZVJlbmRlcmVyLmRyYXcoYXgsYUgs
YXopO2lmKHRoaXMubWFya2VyPQpSZW5kZXJlci5zaG93KXtpZih0aGlzLnJlbmRlcmVyLnNtb290
aCl7YUg9M0R0aGlzLmdyaWREYXRhfWZvcihhQz0zRDA7YUM8YUg9Ci5sZW5ndGg7YUMrKyl7dGhp
cy5tYXJrZXJSZW5kZXJlci5kcmF3KGFIW2FDXVswXSxhSFthQ11bMV0sYXgsYXEubWFya2VyT3B0
aT0Kb25zKX19fX1lbHNle2lmKHRoaXMucmVuZGVyZXIuYmFuZHMuc2hvdyl7dmFyIGFtO3ZhciBh
Sz0zREwuZXh0ZW5kKHRydWUse30sPQphcSk7aWYodGhpcy5yZW5kZXJlci5iYW5kcy5zaG93TGlu
ZXMpe2FtPTNEKHRoaXMucmVuZGVyZXIuc21vb3RoKT90aGlzLnJlbmQ9CmVyZXIuX2hpQmFuZFNt
b290aGVkRGF0YTp0aGlzLnJlbmRlcmVyLl9oaUJhbmRHcmlkRGF0YTt0aGlzLnJlbmRlcmVyLnNo
YXBlUj0KZW5kZXJlci5kcmF3KGF4LGFtLGFxKTthbT0zRCh0aGlzLnJlbmRlcmVyLnNtb290aCk/
dGhpcy5yZW5kZXJlci5fbG93QmFuZFNtPQpvb3RoZWREYXRhOnRoaXMucmVuZGVyZXIuX2xvd0Jh
bmRHcmlkRGF0YTt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuZHJhdyg9CmF4LGFtLGFLKX1p
Zih0aGlzLnJlbmRlcmVyLmJhbmRzLmZpbGwpe2lmKHRoaXMucmVuZGVyZXIuc21vb3RoKXthbT0z
RHRoaXMucj0KZW5kZXJlci5faGlCYW5kU21vb3RoZWREYXRhLmNvbmNhdCh0aGlzLnJlbmRlcmVy
Ll9sb3dCYW5kU21vb3RoZWREYXRhLnJldmVyPQpzZSgpKX1lbHNle2FtPTNEdGhpcy5yZW5kZXJl
ci5faGlCYW5kR3JpZERhdGEuY29uY2F0KHRoaXMucmVuZGVyZXIuX2xvd0JhbmQ9CkdyaWREYXRh
LnJldmVyc2UoKSl9dGhpcy5fYXJlYVBvaW50cz0zRGFtO2FLLmNsb3NlUGF0aD0zRHRydWU7YUsu
ZmlsbD0zRHRydT0KZTthSy5maWxsU3R5bGU9M0R0aGlzLnJlbmRlcmVyLmJhbmRzLmZpbGxDb2xv
cjt0aGlzLnJlbmRlcmVyLnNoYXBlUmVuZGVyZXIuPQpkcmF3KGF4LGFtLGFLKX19aWYoYWspe3Ro
aXMucmVuZGVyZXIuc2hhZG93UmVuZGVyZXIuZHJhdyhheCxhSSxhcSl9dGhpcy5yZW49CmRlcmVy
LnNoYXBlUmVuZGVyZXIuZHJhdyhheCxhSSxhcSl9fXZhciBhcj0zRGF2PTNEYXk9M0RhRT0zRG51
bGw7Zm9yKGFDPTNEMD0KO2FDPHRoaXMuX2FyZWFQb2ludHMubGVuZ3RoO2FDKyspe3ZhciBhdD0z
RHRoaXMuX2FyZWFQb2ludHNbYUNdO2lmKGFyPmF0WzBdPQp8fGFyPTNEPTNEbnVsbCl7YXI9M0Rh
dFswXX1pZihhRTxhdFsxXXx8YUU9M0Q9M0RudWxsKXthRT0zRGF0WzFdfWlmKGF2PGF0WzA9Cl18
fGF2PTNEPTNEbnVsbCl7YXY9M0RhdFswXX1pZihheT5hdFsxXXx8YXk9M0Q9M0RudWxsKXtheT0z
RGF0WzFdfX1pZih0aGlzLj0KdHlwZT0zRD0zRD0zRCJsaW5lIiYmdGhpcy5yZW5kZXJlci5iYW5k
cy5zaG93KXthRT0zRHRoaXMuX3lheGlzLnNlcmllc191MnAoPQp0aGlzLnJlbmRlcmVyLmJhbmRz
Ll9taW4pO2F5PTNEdGhpcy5feWF4aXMuc2VyaWVzX3UycCh0aGlzLnJlbmRlcmVyLmJhbmRzLl89
Cm1heCl9dGhpcy5fYm91bmRpbmdCb3g9M0RbW2FyLGFFXSxbYXYsYXldXTtpZih0aGlzLm1hcmtl
clJlbmRlcmVyLnNob3cmJiFhQT0KKXtpZih0aGlzLnJlbmRlcmVyLnNtb290aCl7YUk9M0R0aGlz
LmdyaWREYXRhfWZvcihhQz0zRDA7YUM8YUkubGVuZ3RoO2FDKyspPQp7aWYoYUlbYUNdWzBdIT0z
RG51bGwmJmFJW2FDXVsxXSE9M0RudWxsKXt0aGlzLm1hcmtlclJlbmRlcmVyLmRyYXcoYUlbYUNd
WzA9Cl0sYUlbYUNdWzFdLGF4LGFxLm1hcmtlck9wdGlvbnMpfX19fWF4LnJlc3RvcmUoKX07TC5q
cXBsb3QuTGluZVJlbmRlcmVyLnBybz0KdG90eXBlLmRyYXdTaGFkb3c9M0RmdW5jdGlvbihhaCxh
aixhaSl7fTtmdW5jdGlvbiB6KGFrLGFqLGFoKXtmb3IodmFyIGFpPTNEPQowO2FpPHRoaXMuc2Vy
aWVzLmxlbmd0aDthaSsrKXtpZih0aGlzLnNlcmllc1thaV0ucmVuZGVyZXIuY29uc3RydWN0b3I9
M0Q9M0Q9CkwuanFwbG90LkxpbmVSZW5kZXJlcil7aWYodGhpcy5zZXJpZXNbYWldLmhpZ2hsaWdo
dE1vdXNlT3Zlcil7dGhpcy5zZXJpZXNbYT0KaV0uaGlnaGxpZ2h0TW91c2VEb3duPTNEZmFsc2V9
fX19ZnVuY3Rpb24gYWYoKXtpZih0aGlzLnBsdWdpbnMubGluZVJlbmRlcmVyPQomJnRoaXMucGx1
Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzKXt0aGlzLnBsdWdpbnMubGluZVJlbmRl
cmVyLmhpZ2g9CmxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLmxpbmVSZW5k
ZXJlci5oaWdobGlnaHRDYW52YXM9M0RudWxsfT0KdGhpcy5wbHVnaW5zLmxpbmVSZW5kZXJlci5o
aWdobGlnaHRlZFNlcmllc0luZGV4PTNEbnVsbDt0aGlzLnBsdWdpbnMubGluZVJlPQpuZGVyZXIu
aGlnaGxpZ2h0Q2FudmFzPTNEbmV3IEwuanFwbG90LkdlbmVyaWNDYW52YXMoKTt0aGlzLmV2ZW50
Q2FudmFzLl9lbGU9Cm0uYmVmb3JlKHRoaXMucGx1Z2lucy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0
Q2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZD0KUGFkZGluZywianFwbG90LWxpbmVSZW5k
ZXJlci1oaWdobGlnaHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSk7PQp0aGlz
LnBsdWdpbnMubGluZVJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7dGhpcy5l
dmVudENhbnZhcy5fZWw9CmVtLmJpbmQoIm1vdXNlbGVhdmUiLHtwbG90OnRoaXN9LGZ1bmN0aW9u
KGFoKXthYShhaC5kYXRhLnBsb3QpfSl9ZnVuY3Rpb24gYT0KYyhhbixhbSxhayxhail7dmFyIGFp
PTNEYW4uc2VyaWVzW2FtXTt2YXIgYWg9M0Rhbi5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdoPQps
aWdodENhbnZhczthaC5fY3R4LmNsZWFyUmVjdCgwLDAsYWguX2N0eC5jYW52YXMud2lkdGgsYWgu
X2N0eC5jYW52YXMuaGVpZ2g9CnQpO2FpLl9oaWdobGlnaHRlZFBvaW50PTNEYWs7YW4ucGx1Z2lu
cy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD0KPTNEYW07dmFyIGFsPTNEe2Zp
bGxTdHlsZTphaS5oaWdobGlnaHRDb2xvcn07aWYoYWkudHlwZT0zRD0zRD0zRCJsaW5lIiYmYWku
PQpyZW5kZXJlci5iYW5kcy5zaG93KXthbC5maWxsPTNEdHJ1ZTthbC5jbG9zZVBhdGg9M0R0cnVl
fWFpLnJlbmRlcmVyLnNoYXBlUmU9Cm5kZXJlci5kcmF3KGFoLl9jdHgsYWosYWwpO2FoPTNEbnVs
bH1mdW5jdGlvbiBhYShhail7dmFyIGFoPTNEYWoucGx1Z2lucy5saT0KbmVSZW5kZXJlci5oaWdo
bGlnaHRDYW52YXM7YWguX2N0eC5jbGVhclJlY3QoMCwwLGFoLl9jdHguY2FudmFzLndpZHRoLGFo
Ll9jPQp0eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIGFpPTNEMDthaTxhai5zZXJpZXMubGVuZ3Ro
O2FpKyspe2FqLnNlcmllc1thaV0uX2g9CmlnaGxpZ2h0ZWRQb2ludD0zRG51bGx9YWoucGx1Z2lu
cy5saW5lUmVuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD0zRG51bD0KbDthai50YXJnZXQu
dHJpZ2dlcigianFwbG90RGF0YVVuaGlnaGxpZ2h0Iik7YWg9M0RudWxsfWZ1bmN0aW9uIGgoYWws
YWssYW8sPQphbixhbSl7aWYoYW4pe3ZhciBhaj0zRFthbi5zZXJpZXNJbmRleCxhbi5wb2ludElu
ZGV4LGFuLmRhdGFdO3ZhciBhaT0zRGpRdWU9CnJ5LkV2ZW50KCJqcXBsb3REYXRhTW91c2VPdmVy
Iik7YWkucGFnZVg9M0RhbC5wYWdlWDthaS5wYWdlWT0zRGFsLnBhZ2VZO2FtLj0KdGFyZ2V0LnRy
aWdnZXIoYWksYWopO2lmKGFtLnNlcmllc1thalswXV0uaGlnaGxpZ2h0TW91c2VPdmVyJiYhKGFq
WzBdPTNEPTNEPQphbS5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGV4
KSl7dmFyIGFoPTNEalF1ZXJ5LkV2ZW50KCJqcXA9CmxvdERhdGFIaWdobGlnaHQiKTthaC53aGlj
aD0zRGFsLndoaWNoO2FoLnBhZ2VYPTNEYWwucGFnZVg7YWgucGFnZVk9M0RhbC5wYT0KZ2VZO2Ft
LnRhcmdldC50cmlnZ2VyKGFoLGFqKTthYyhhbSxhbi5zZXJpZXNJbmRleCxhbi5wb2ludEluZGV4
LGFuLnBvaW50cyl9PQp9ZWxzZXtpZihhbj0zRD0zRG51bGwpe2FhKGFtKX19fWZ1bmN0aW9uIGUo
YWssYWosYW4sYW0sYWwpe2lmKGFtKXt2YXIgYWk9M0Q9ClthbS5zZXJpZXNJbmRleCxhbS5wb2lu
dEluZGV4LGFtLmRhdGFdO2lmKGFsLnNlcmllc1thaVswXV0uaGlnaGxpZ2h0TW91c2VEbz0Kd24m
JiEoYWlbMF09M0Q9M0RhbC5wbHVnaW5zLmxpbmVSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0lu
ZGV4KSl7dmFyIGFoPTNEPQpqUXVlcnkuRXZlbnQoImpxcGxvdERhdGFIaWdobGlnaHQiKTthaC53
aGljaD0zRGFrLndoaWNoO2FoLnBhZ2VYPTNEYWsucGFnZVg9CjthaC5wYWdlWT0zRGFrLnBhZ2VZ
O2FsLnRhcmdldC50cmlnZ2VyKGFoLGFpKTthYyhhbCxhbS5zZXJpZXNJbmRleCxhbS5wb2ludD0K
SW5kZXgsYW0ucG9pbnRzKX19ZWxzZXtpZihhbT0zRD0zRG51bGwpe2FhKGFsKX19fWZ1bmN0aW9u
IGFkKGFqLGFpLGFtLGFsLGFrPQope3ZhciBhaD0zRGFrLnBsdWdpbnMubGluZVJlbmRlcmVyLmhp
Z2hsaWdodGVkU2VyaWVzSW5kZXg7aWYoYWghPTNEbnVsbCYmYWs9Ci5zZXJpZXNbYWhdLmhpZ2hs
aWdodE1vdXNlRG93bil7YWEoYWspfX1mdW5jdGlvbiBnKGFrLGFqLGFuLGFtLGFsKXtpZihhbSl7
dj0KYXIgYWk9M0RbYW0uc2VyaWVzSW5kZXgsYW0ucG9pbnRJbmRleCxhbS5kYXRhXTt2YXIgYWg9
M0RqUXVlcnkuRXZlbnQoImpxcGxvPQp0RGF0YUNsaWNrIik7YWgud2hpY2g9M0Rhay53aGljaDth
aC5wYWdlWD0zRGFrLnBhZ2VYO2FoLnBhZ2VZPTNEYWsucGFnZVk7YWw9Ci50YXJnZXQudHJpZ2dl
cihhaCxhaSl9fWZ1bmN0aW9uIHMoYWwsYWssYW8sYW4sYW0pe2lmKGFuKXt2YXIgYWo9M0RbYW4u
c2VyaT0KZXNJbmRleCxhbi5wb2ludEluZGV4LGFuLmRhdGFdO3ZhciBhaD0zRGFtLnBsdWdpbnMu
bGluZVJlbmRlcmVyLmhpZ2hsaWdodGVkPQpTZXJpZXNJbmRleDtpZihhaCE9M0RudWxsJiZhbS5z
ZXJpZXNbYWhdLmhpZ2hsaWdodE1vdXNlRG93bil7YWEoYW0pfXZhciBhaT0KPTNEalF1ZXJ5LkV2
ZW50KCJqcXBsb3REYXRhUmlnaHRDbGljayIpO2FpLndoaWNoPTNEYWwud2hpY2g7YWkucGFnZVg9
M0RhbC5wPQphZ2VYO2FpLnBhZ2VZPTNEYWwucGFnZVk7YW0udGFyZ2V0LnRyaWdnZXIoYWksYWop
fX1MLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGU9CnJlcj0zRGZ1bmN0aW9uKCl7fTtMLmpxcGxvdC5M
aW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlvbihhaD0KKXt0aGlzLmJy
ZWFrUG9pbnRzPTNEbnVsbDt0aGlzLmJyZWFrVGlja0xhYmVsPTNEIiZhc3ltcDsiO3RoaXMuZHJh
d0Jhc2VsaW5lPQo9M0R0cnVlO3RoaXMuYmFzZWxpbmVXaWR0aD0zRG51bGw7dGhpcy5iYXNlbGlu
ZUNvbG9yPTNEbnVsbDt0aGlzLmZvcmNlVGlja0E9CnQwPTNEZmFsc2U7dGhpcy5mb3JjZVRpY2tB
dDEwMD0zRGZhbHNlO3RoaXMudGlja0luc2V0PTNEMDt0aGlzLm1pbm9yVGlja3M9Cj0zRDA7dGhp
cy5hbGlnblRpY2tzPTNEZmFsc2U7dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0zRCIiO3RoaXMuX292
ZXJyaWRlRm9ybT0KYXRTdHJpbmc9M0RmYWxzZTt0aGlzLl9zY2FsZWZhY3Q9M0QxO0wuZXh0ZW5k
KHRydWUsdGhpcyxhaCk7aWYodGhpcy5icmVha1BvPQppbnRzKXtpZighTC5pc0FycmF5KHRoaXMu
YnJlYWtQb2ludHMpKXt0aGlzLmJyZWFrUG9pbnRzPTNEbnVsbH1lbHNle2lmKHRoaXM9Ci5icmVh
a1BvaW50cy5sZW5ndGg8Mnx8dGhpcy5icmVha1BvaW50c1sxXTw9M0R0aGlzLmJyZWFrUG9pbnRz
WzBdKXt0aGlzLmJyZT0KYWtQb2ludHM9M0RudWxsfX19aWYodGhpcy5udW1iZXJUaWNrcyE9M0Ru
dWxsJiZ0aGlzLm51bWJlclRpY2tzPDIpe3RoaXMubnVtPQpiZXJUaWNrcz0zRDJ9dGhpcy5yZXNl
dERhdGFCb3VuZHMoKX07TC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyLnByb3RvdHlwZS49CmRy
YXc9M0RmdW5jdGlvbihhaCxhbyl7aWYodGhpcy5zaG93KXt0aGlzLnJlbmRlcmVyLmNyZWF0ZVRp
Y2tzLmNhbGwodGhpcyxhbz0KKTt2YXIgYW49M0QwO3ZhciBhaTtpZih0aGlzLl9lbGVtKXt0aGlz
Ll9lbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLl9lbGVtPTNEbnVsPQpsfXRoaXMuX2VsZW09M0RMKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt0aGlzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3Q9
Ci1heGlzIGpxcGxvdC0iK3RoaXMubmFtZSk7dGhpcy5fZWxlbS5jc3MoInBvc2l0aW9uIiwiYWJz
b2x1dGUiKTtpZih0aGlzLm5hbT0KZT0zRD0zRCJ4YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4
aXMiKXt0aGlzLl9lbGVtLndpZHRoKHRoaXMuX3Bsb3REaW1lbnNpPQpvbnMud2lkdGgpfWVsc2V7
dGhpcy5fZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0KX10aGlzLmxhYmVs
T3A9CnRpb25zLmF4aXM9M0R0aGlzLm5hbWU7dGhpcy5fbGFiZWw9M0RuZXcgdGhpcy5sYWJlbFJl
bmRlcmVyKHRoaXMubGFiZWxPcHRpbz0KbnMpO2lmKHRoaXMuX2xhYmVsLnNob3cpe3ZhciBhbT0z
RHRoaXMuX2xhYmVsLmRyYXcoYWgsYW8pO2FtLmFwcGVuZFRvKHRoaXMuPQpfZWxlbSk7YW09M0Ru
dWxsfXZhciBhbD0zRHRoaXMuX3RpY2tzO3ZhciBhaztmb3IodmFyIGFqPTNEMDthajxhbC5sZW5n
dGg7YWo9CisrKXthaz0zRGFsW2FqXTtpZihhay5zaG93JiZhay5zaG93TGFiZWwmJighYWsuaXNN
aW5vclRpY2t8fHRoaXMuc2hvd01pbm9yVD0KaWNrcykpe3RoaXMuX2VsZW0uYXBwZW5kKGFrLmRy
YXcoYWgsYW8pKX19YWs9M0RudWxsO2FsPTNEbnVsbH1yZXR1cm4gdGhpcy5fPQplbGVtfTtMLmpx
cGxvdC5MaW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0PTNEZnVuY3Rpb24oKXt0aGlz
Lm1pbj0zRHQ9Cmhpcy5fb3B0aW9ucy5taW47dGhpcy5tYXg9M0R0aGlzLl9vcHRpb25zLm1heDt0
aGlzLnRpY2tJbnRlcnZhbD0zRHRoaXMuX29wdD0KaW9ucy50aWNrSW50ZXJ2YWw7dGhpcy5udW1i
ZXJUaWNrcz0zRHRoaXMuX29wdGlvbnMubnVtYmVyVGlja3M7dGhpcy5fYXV0b0ZvPQpybWF0U3Ry
aW5nPTNEIiI7aWYodGhpcy5fb3ZlcnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMudGlja09wdGlvbnMm
JnRoaXMudGlja089CnB0aW9ucy5mb3JtYXRTdHJpbmcpe3RoaXMudGlja09wdGlvbnMuZm9ybWF0
U3RyaW5nPTNEIiJ9fTtMLmpxcGxvdC5MaW5lYXJBeD0KaXNSZW5kZXJlci5wcm90b3R5cGUuc2V0
PTNEZnVuY3Rpb24oKXt2YXIgYW89M0QwO3ZhciBhajt2YXIgYWk9M0QwO3ZhciBhbj0KPTNEMDt2
YXIgYWg9M0QodGhpcy5fbGFiZWw9M0Q9M0RudWxsKT9mYWxzZTp0aGlzLl9sYWJlbC5zaG93O2lm
KHRoaXMuc2hvdyl7PQp2YXIgYW09M0R0aGlzLl90aWNrczt2YXIgYWw7Zm9yKHZhciBhaz0zRDA7
YWs8YW0ubGVuZ3RoO2FrKyspe2FsPTNEYW1bYWtdO2k9CmYoIWFsLl9icmVha1RpY2smJmFsLnNo
b3cmJmFsLnNob3dMYWJlbCYmKCFhbC5pc01pbm9yVGlja3x8dGhpcy5zaG93TWlub3JUaT0KY2tz
KSl7aWYodGhpcy5uYW1lPTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIngyYXhpcyIpe2Fq
PTNEYWwuX2VsZW0ub3V0PQplckhlaWdodCh0cnVlKX1lbHNle2FqPTNEYWwuX2VsZW0ub3V0ZXJX
aWR0aCh0cnVlKX1pZihhaj5hbyl7YW89M0Rhan19fWFsPQo9M0RudWxsO2FtPTNEbnVsbDtpZihh
aCl7YWk9M0R0aGlzLl9sYWJlbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpO2FuPTNEdGhpcy49Cl9s
YWJlbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1pZih0aGlzLm5hbWU9M0Q9M0QieGF4aXMiKXth
bz0zRGFvK2FuO3RoaXMuXz0KZWxlbS5jc3Moe2hlaWdodDphbysicHgiLGxlZnQ6IjBweCIsYm90
dG9tOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9M0Q9M0QiPQp4MmF4aXMiKXthbz0zRGFvK2Fu
O3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6YW8rInB4IixsZWZ0OiIwcHgiLHRvcDoiMHB4In0pfWU9
CmxzZXtpZih0aGlzLm5hbWU9M0Q9M0QieWF4aXMiKXthbz0zRGFvK2FpO3RoaXMuX2VsZW0uY3Nz
KHt3aWR0aDphbysicHgiLGxlZj0KdDoiMHB4Iix0b3A6IjBweCJ9KTtpZihhaCYmdGhpcy5fbGFi
ZWwuY29uc3RydWN0b3I9M0Q9M0RMLmpxcGxvdC5BeGlzTGFiZWxSPQplbmRlcmVyKXt0aGlzLl9s
YWJlbC5fZWxlbS5jc3MoIndpZHRoIixhaSsicHgiKX19ZWxzZXthbz0zRGFvK2FpO3RoaXMuX2Vs
ZW09Ci5jc3Moe3dpZHRoOmFvKyJweCIscmlnaHQ6IjBweCIsdG9wOiIwcHgifSk7aWYoYWgmJnRo
aXMuX2xhYmVsLmNvbnN0cnVjdG9yPQo9M0Q9M0RMLmpxcGxvdC5BeGlzTGFiZWxSZW5kZXJlcil7
dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ3aWR0aCIsYWkrInB4Iil9fX09Cn19fTtMLmpxcGxvdC5M
aW5lYXJBeGlzUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZVRpY2tzPTNEZnVuY3Rpb24oYWope3Zh
ciBhVD0KPTNEdGhpcy5fdGlja3M7dmFyIGFLPTNEdGhpcy50aWNrczt2YXIgYXo9M0R0aGlzLm5h
bWU7dmFyIGFCPTNEdGhpcy5fZGF0YUJvPQp1bmRzO3ZhciBhaD0zRCh0aGlzLm5hbWUuY2hhckF0
KDApPTNEPTNEPTNEIngiKT90aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aDo9CnRoaXMuX3Bsb3RE
aW1lbnNpb25zLmhlaWdodDt2YXIgYW47dmFyIGE2LGFJO3ZhciBhcCxhbzt2YXIgYTQsYTA7dmFy
IGFIPTNEdD0KaGlzLm1pbjt2YXIgYTU9M0R0aGlzLm1heDt2YXIgYVc9M0R0aGlzLm51bWJlclRp
Y2tzO3ZhciBiYT0zRHRoaXMudGlja0ludGVyPQp2YWw7dmFyIGFtPTNEMzA7dGhpcy5fc2NhbGVm
YWN0PTNEKE1hdGgubWF4KGFoLGFtKzEpLWFtKS8zMDA7aWYoYUsubGVuZ3RoKXs9CmZvcihhMD0z
RDA7YTA8YUsubGVuZ3RoO2EwKyspe3ZhciBhTz0zRGFLW2EwXTt2YXIgYVU9M0RuZXcgdGhpcy50
aWNrUmVuZGVyZT0Kcih0aGlzLnRpY2tPcHRpb25zKTtpZihMLmlzQXJyYXkoYU8pKXthVS52YWx1
ZT0zRGFPWzBdO2lmKHRoaXMuYnJlYWtQb2ludHMpPQp7aWYoYU9bMF09M0Q9M0R0aGlzLmJyZWFr
UG9pbnRzWzBdKXthVS5sYWJlbD0zRHRoaXMuYnJlYWtUaWNrTGFiZWw7YVUuX2JyZWE9CmtUaWNr
PTNEdHJ1ZTthVS5zaG93R3JpZGxpbmU9M0RmYWxzZTthVS5zaG93TWFyaz0zRGZhbHNlfWVsc2V7
aWYoYU9bMF0+dGhpcz0KLmJyZWFrUG9pbnRzWzBdJiZhT1swXTw9M0R0aGlzLmJyZWFrUG9pbnRz
WzFdKXthVS5zaG93PTNEZmFsc2U7YVUuc2hvd0dyaWRsPQppbmU9M0RmYWxzZTthVS5sYWJlbD0z
RGFPWzFdfWVsc2V7YVUubGFiZWw9M0RhT1sxXX19fWVsc2V7YVUubGFiZWw9M0RhT1sxXX09CmFV
LnNldFRpY2soYU9bMF0sdGhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKGFVKX1lbHNle2lmKEwu
aXNQbGFpbk9iamVjdChhTz0KKSl7TC5leHRlbmQodHJ1ZSxhVSxhTyk7YVUuYXhpcz0zRHRoaXMu
bmFtZTt0aGlzLl90aWNrcy5wdXNoKGFVKX1lbHNle2FVLnZhPQpsdWU9M0RhTztpZih0aGlzLmJy
ZWFrUG9pbnRzKXtpZihhTz0zRD0zRHRoaXMuYnJlYWtQb2ludHNbMF0pe2FVLmxhYmVsPTNEdGg9
CmlzLmJyZWFrVGlja0xhYmVsO2FVLl9icmVha1RpY2s9M0R0cnVlO2FVLnNob3dHcmlkbGluZT0z
RGZhbHNlO2FVLnNob3dNYXJrPQo9M0RmYWxzZX1lbHNle2lmKGFPPnRoaXMuYnJlYWtQb2ludHNb
MF0mJmFPPD0zRHRoaXMuYnJlYWtQb2ludHNbMV0pe2FVLnNob3c9Cj0zRGZhbHNlO2FVLnNob3dH
cmlkbGluZT0zRGZhbHNlfX19YVUuc2V0VGljayhhTyx0aGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1
cz0KaChhVSl9fX10aGlzLm51bWJlclRpY2tzPTNEYUsubGVuZ3RoO3RoaXMubWluPTNEdGhpcy5f
dGlja3NbMF0udmFsdWU7dGhpcy5tPQpheD0zRHRoaXMuX3RpY2tzW3RoaXMubnVtYmVyVGlja3Mt
MV0udmFsdWU7dGhpcy50aWNrSW50ZXJ2YWw9M0QodGhpcy5tYXgtdGg9CmlzLm1pbikvKHRoaXMu
bnVtYmVyVGlja3MtMSl9ZWxzZXtpZihhej0zRD0zRCJ4YXhpcyJ8fGF6PTNEPTNEIngyYXhpcyIp
e2FoPQo9M0R0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aH1lbHNle2FoPTNEdGhpcy5fcGxvdERp
bWVuc2lvbnMuaGVpZ2h0fXZhciBheD0KPTNEdGhpcy5udW1iZXJUaWNrcztpZih0aGlzLmFsaWdu
VGlja3Mpe2lmKHRoaXMubmFtZT0zRD0zRD0zRCJ4MmF4aXMiJiZhai5hPQp4ZXMueGF4aXMuc2hv
dyl7YXg9M0Rhai5heGVzLnhheGlzLm51bWJlclRpY2tzfWVsc2V7aWYodGhpcy5uYW1lLmNoYXJB
dCgwKT0KPTNEPTNEPTNEInkiJiZ0aGlzLm5hbWUhPTNEPTNEInlheGlzIiYmdGhpcy5uYW1lIT0z
RD0zRCJ5TWlkQXhpcyImJmFqLmF4ZXMuPQp5YXhpcy5zaG93KXtheD0zRGFqLmF4ZXMueWF4aXMu
bnVtYmVyVGlja3N9fX1hNj0zRCgodGhpcy5taW4hPTNEbnVsbCk/dGhpcy49Cm1pbjphQi5taW4p
O2FJPTNEKCh0aGlzLm1heCE9M0RudWxsKT90aGlzLm1heDphQi5tYXgpO3ZhciBhdj0zRGFJLWE2
O3ZhciBhUz0KLGF5O3ZhciBhdDtpZih0aGlzLnRpY2tPcHRpb25zPTNEPTNEbnVsbHx8IXRoaXMu
dGlja09wdGlvbnMuZm9ybWF0U3RyaW5nKXt0PQpoaXMuX292ZXJyaWRlRm9ybWF0U3RyaW5nPTNE
dHJ1ZX1pZih0aGlzLm1pbj0zRD0zRG51bGx8fHRoaXMubWF4PTNEPTNEbnVsbCY9CiZ0aGlzLnRp
Y2tJbnRlcnZhbD0zRD0zRG51bGwmJiF0aGlzLmF1dG9zY2FsZSl7aWYodGhpcy5mb3JjZVRpY2tB
dDApe2lmKGE2Pj0KMCl7YTY9M0QwfWlmKGFJPDApe2FJPTNEMH19aWYodGhpcy5mb3JjZVRpY2tB
dDEwMCl7aWYoYTY+MTAwKXthNj0zRDEwMH1pZihhPQpJPDEwMCl7YUk9M0QxMDB9fXZhciBhRT0z
RGZhbHNlLGExPTNEZmFsc2U7aWYodGhpcy5taW4hPTNEbnVsbCl7YUU9M0R0cnVlfWU9CmxzZXtp
Zih0aGlzLm1heCE9M0RudWxsKXthMT0zRHRydWV9fXZhciBhUD0zREwuanFwbG90LkxpbmVhclRp
Y2tHZW5lcmF0b3IoYT0KNixhSSx0aGlzLl9zY2FsZWZhY3QsYXgsYUUsYTEpO3ZhciBhdz0zRCh0
aGlzLm1pbiE9M0RudWxsKT9hNjphNithdioodGhpcy5wPQphZE1pbi0xKTt2YXIgYVE9M0QodGhp
cy5tYXghPTNEbnVsbCk/YUk6YUktYXYqKHRoaXMucGFkTWF4LTEpO2lmKGE2PGF3fHxhST49CmFR
KXthdz0zRCh0aGlzLm1pbiE9M0RudWxsKT9hNjphNi1hdioodGhpcy5wYWRNaW4tMSk7YVE9M0Qo
dGhpcy5tYXghPTNEbnVsbD0KKT9hSTphSSthdioodGhpcy5wYWRNYXgtMSk7YVA9M0RMLmpxcGxv
dC5MaW5lYXJUaWNrR2VuZXJhdG9yKGF3LGFRLHRoaXMuX3NjPQphbGVmYWN0LGF4LGFFLGExKX10
aGlzLm1pbj0zRGFQWzBdO3RoaXMubWF4PTNEYVBbMV07dGhpcy5udW1iZXJUaWNrcz0zRGFQWzI9
Cl07dGhpcy5fYXV0b0Zvcm1hdFN0cmluZz0zRGFQWzNdO3RoaXMudGlja0ludGVydmFsPTNEYVBb
NF19ZWxzZXtpZihhNj0zRD0zRD0KYUkpe3ZhciBhaT0zRDAuMDU7aWYoYTY+MCl7YWk9M0RNYXRo
Lm1heChNYXRoLmxvZyhhNikvTWF0aC5MTjEwLDAuMDUpfWE2LT0KPTNEYWk7YUkrPTNEYWl9aWYo
dGhpcy5hdXRvc2NhbGUmJnRoaXMubWluPTNEPTNEbnVsbCYmdGhpcy5tYXg9M0Q9M0RudWxsKXt2
PQphciBhayxhbCxhcjt2YXIgYUM9M0RmYWxzZTt2YXIgYU49M0RmYWxzZTt2YXIgYUE9M0R7bWlu
Om51bGwsbWF4Om51bGwsYXZlcmE9CmdlOm51bGwsc3RkZGV2Om51bGx9O2Zvcih2YXIgYTA9M0Qw
O2EwPHRoaXMuX3Nlcmllcy5sZW5ndGg7YTArKyl7dmFyIGFWPTNEdD0KaGlzLl9zZXJpZXNbYTBd
O3ZhciBhRD0zRChhVi5maWxsQXhpcz0zRD0zRCJ4Iik/YVYuX3hheGlzLm5hbWU6YVYuX3lheGlz
Lm5hPQptZTtpZih0aGlzLm5hbWU9M0Q9M0RhRCl7dmFyIGFSPTNEYVYuX3Bsb3RWYWx1ZXNbYVYu
ZmlsbEF4aXNdO3ZhciBhRz0zRGFSWzA9Cl07dmFyIGEyPTNEYVJbMF07Zm9yKHZhciBhWj0zRDE7
YVo8YVIubGVuZ3RoO2FaKyspe2lmKGFSW2FaXTxhRyl7YUc9M0RhUlthWj0KXX1lbHNle2lmKGFS
W2FaXT5hMil7YTI9M0RhUlthWl19fX12YXIgYXU9M0QoYTItYUcpL2EyO2lmKGFWLnJlbmRlcmVy
LmNvbnN0PQpydWN0b3I9M0Q9M0RMLmpxcGxvdC5CYXJSZW5kZXJlcil7aWYoYUc+PTNEMCYmKGFW
LmZpbGxUb1plcm98fGF1PjAuMSkpe2FDPQo9M0R0cnVlfWVsc2V7YUM9M0RmYWxzZTtpZihhVi5m
aWxsJiZhVi5maWxsVG9aZXJvJiZhRzwwJiZhMj4wKXthTj0zRHRydWV9ZWw9CnNle2FOPTNEZmFs
c2V9fX1lbHNle2lmKGFWLmZpbGwpe2lmKGFHPj0zRDAmJihhVi5maWxsVG9aZXJvfHxhdT4wLjEp
KXthQz0zRD0KdHJ1ZX1lbHNle2lmKGFHPDAmJmEyPjAmJmFWLmZpbGxUb1plcm8pe2FDPTNEZmFs
c2U7YU49M0R0cnVlfWVsc2V7YUM9M0RmYWxzPQplO2FOPTNEZmFsc2V9fX1lbHNle2lmKGFHPDAp
e2FDPTNEZmFsc2V9fX19fWlmKGFDKXt0aGlzLm51bWJlclRpY2tzPTNEMitNYXQ9CmguY2VpbCgo
YWgtKHRoaXMudGlja1NwYWNpbmctMSkpL3RoaXMudGlja1NwYWNpbmcpO3RoaXMubWluPTNEMDth
SD0zRDA7YWw9Cj0zRGFJLyh0aGlzLm51bWJlclRpY2tzLTEpO2F0PTNETWF0aC5wb3coMTAsTWF0
aC5hYnMoTWF0aC5mbG9vcihNYXRoLmxvZyhhbD0KKS9NYXRoLkxOMTApKSk7aWYoYWwvYXQ9M0Q9
M0RwYXJzZUludChhbC9hdCwxMCkpe2FsKz0zRGF0fXRoaXMudGlja0ludGVydmFsPQo9M0RNYXRo
LmNlaWwoYWwvYXQpKmF0O3RoaXMubWF4PTNEdGhpcy50aWNrSW50ZXJ2YWwqKHRoaXMubnVtYmVy
VGlja3MtMSl9ZWw9CnNle2lmKGFOKXt0aGlzLm51bWJlclRpY2tzPTNEMitNYXRoLmNlaWwoKGFo
LSh0aGlzLnRpY2tTcGFjaW5nLTEpKS90aGlzLnRpYz0Ka1NwYWNpbmcpO3ZhciBhSj0zRE1hdGgu
Y2VpbChNYXRoLmFicyhhNikvYXYqKHRoaXMubnVtYmVyVGlja3MtMSkpO3ZhciBhOT0KPTNEdGhp
cy5udW1iZXJUaWNrcy0xLWFKO2FsPTNETWF0aC5tYXgoTWF0aC5hYnMoYTYvYUopLE1hdGguYWJz
KGFJL2E5KSk7YXQ9Cj0zRE1hdGgucG93KDEwLE1hdGguYWJzKE1hdGguZmxvb3IoTWF0aC5sb2co
YWwpL01hdGguTE4xMCkpKTt0aGlzLnRpY2tJbnRlcj0KdmFsPTNETWF0aC5jZWlsKGFsL2F0KSph
dDt0aGlzLm1heD0zRHRoaXMudGlja0ludGVydmFsKmE5O3RoaXMubWluPTNELXRoaXMuPQp0aWNr
SW50ZXJ2YWwqYUp9ZWxzZXtpZih0aGlzLm51bWJlclRpY2tzPTNEPTNEbnVsbCl7aWYodGhpcy50
aWNrSW50ZXJ2YWwpe3Q9Cmhpcy5udW1iZXJUaWNrcz0zRDMrTWF0aC5jZWlsKGF2L3RoaXMudGlj
a0ludGVydmFsKX1lbHNle3RoaXMubnVtYmVyVGlja3M9Cj0zRDIrTWF0aC5jZWlsKChhaC0odGhp
cy50aWNrU3BhY2luZy0xKSkvdGhpcy50aWNrU3BhY2luZyl9fWlmKHRoaXMudGlja0ludD0KZXJ2
YWw9M0Q9M0RudWxsKXthbD0zRGF2Lyh0aGlzLm51bWJlclRpY2tzLTEpO2lmKGFsPDEpe2F0PTNE
TWF0aC5wb3coMTAsTWF0PQpoLmFicyhNYXRoLmZsb29yKE1hdGgubG9nKGFsKS9NYXRoLkxOMTAp
KSl9ZWxzZXthdD0zRDF9dGhpcy50aWNrSW50ZXJ2YWw9M0Q9Ck1hdGguY2VpbChhbCphdCp0aGlz
LnBhZCkvYXR9ZWxzZXthdD0zRDEvdGhpcy50aWNrSW50ZXJ2YWx9YWs9M0R0aGlzLnRpY2tJbj0K
dGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpO2FyPTNEKGFrLWF2KS8yO2lmKHRoaXMubWluPTNE
PTNEbnVsbCl7dGhpcy5taW49Cj0zRE1hdGguZmxvb3IoYXQqKGE2LWFyKSkvYXR9aWYodGhpcy5t
YXg9M0Q9M0RudWxsKXt0aGlzLm1heD0zRHRoaXMubWluK2FrfT0KfX12YXIgYUY9M0RMLmpxcGxv
dC5nZXRTaWduaWZpY2FudEZpZ3VyZXModGhpcy50aWNrSW50ZXJ2YWwpO3ZhciBhTTtpZihhRi5k
PQppZ2l0c0xlZnQ+PTNEYUYuc2lnbmlmaWNhbnREaWdpdHMpe2FNPTNEIiVkIn1lbHNle3ZhciBh
dD0zRE1hdGgubWF4KDAsNS1hRi49CmRpZ2l0c0xlZnQpO2F0PTNETWF0aC5taW4oYXQsYUYuZGln
aXRzUmlnaHQpO2FNPTNEIiUuIithdCsiZiJ9dGhpcy5fYXV0b0Zvcj0KbWF0U3RyaW5nPTNEYU19
ZWxzZXthUz0zRCh0aGlzLm1pbiE9M0RudWxsKT90aGlzLm1pbjphNi1hdioodGhpcy5wYWRNaW4t
MSk7PQpheT0zRCh0aGlzLm1heCE9M0RudWxsKT90aGlzLm1heDphSSthdioodGhpcy5wYWRNYXgt
MSk7YXY9M0RheS1hUztpZih0aGlzLm49CnVtYmVyVGlja3M9M0Q9M0RudWxsKXtpZih0aGlzLnRp
Y2tJbnRlcnZhbCE9M0RudWxsKXt0aGlzLm51bWJlclRpY2tzPTNETWF0aD0KLmNlaWwoKGF5LWFT
KS90aGlzLnRpY2tJbnRlcnZhbCkrMX1lbHNle2lmKGFoPjEwMCl7dGhpcy5udW1iZXJUaWNrcz0z
RHBhcnNlPQpJbnQoMysoYWgtMTAwKS83NSwxMCl9ZWxzZXt0aGlzLm51bWJlclRpY2tzPTNEMn19
fWlmKHRoaXMudGlja0ludGVydmFsPTNEPQo9M0RudWxsKXt0aGlzLnRpY2tJbnRlcnZhbD0zRGF2
Lyh0aGlzLm51bWJlclRpY2tzLTEpfWlmKHRoaXMubWF4PTNEPTNEbnVsbCk9CntheT0zRGFTK3Ro
aXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpfWlmKHRoaXMubWluPTNEPTNEbnVs
bCl7YVM9Cj0zRGF5LXRoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpfXZhciBh
Rj0zREwuanFwbG90LmdldFNpZ25pZmljYT0KbnRGaWd1cmVzKHRoaXMudGlja0ludGVydmFsKTt2
YXIgYU07aWYoYUYuZGlnaXRzTGVmdD49M0RhRi5zaWduaWZpY2FudERpZ2l0PQpzKXthTT0zRCIl
ZCJ9ZWxzZXt2YXIgYXQ9M0RNYXRoLm1heCgwLDUtYUYuZGlnaXRzTGVmdCk7YXQ9M0RNYXRoLm1p
bihhdCxhRi49CmRpZ2l0c1JpZ2h0KTthTT0zRCIlLiIrYXQrImYifXRoaXMuX2F1dG9Gb3JtYXRT
dHJpbmc9M0RhTTt0aGlzLm1pbj0zRGFTO3RoaT0Kcy5tYXg9M0RheX1pZih0aGlzLnJlbmRlcmVy
LmNvbnN0cnVjdG9yPTNEPTNETC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyJiZ0PQpoaXMuX2F1
dG9Gb3JtYXRTdHJpbmc9M0Q9M0QiIil7YXY9M0R0aGlzLm1heC10aGlzLm1pbjt2YXIgYTc9M0Ru
ZXcgdGhpcy50aWM9CmtSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTt2YXIgYUw9M0RhNy5mb3Jt
YXRTdHJpbmd8fEwuanFwbG90LmNvbmZpZy5kZWZhdT0KbHRUaWNrRm9ybWF0U3RyaW5nO3ZhciBh
TD0zRGFMLm1hdGNoKEwuanFwbG90LnNwcmludGYucmVnZXgpWzBdO3ZhciBhMz0zRDA7PQppZihh
TCl7aWYoYUwuc2VhcmNoKC9bZkZlRWdHcFBdLyk+LTEpe3ZhciBhWT0zRGFMLm1hdGNoKC9cJVwu
KFxkezAsfSk/W2VFZkY9CmdHcFBdLyk7aWYoYVkpe2EzPTNEcGFyc2VJbnQoYVlbMV0sMTApfWVs
c2V7YTM9M0Q2fX1lbHNle2lmKGFMLnNlYXJjaCgvW2RpXT0KLyk+LTEpe2EzPTNEMH19dmFyIGFx
PTNETWF0aC5wb3coMTAsLWEzKTtpZih0aGlzLnRpY2tJbnRlcnZhbDxhcSl7aWYoYVc9M0Q9Cj0z
RG51bGwmJmJhPTNEPTNEbnVsbCl7dGhpcy50aWNrSW50ZXJ2YWw9M0RhcTtpZihhNT0zRD0zRG51
bGwmJmFIPTNEPTNEbnVsbD0KKXt0aGlzLm1pbj0zRE1hdGguZmxvb3IodGhpcy5fZGF0YUJvdW5k
cy5taW4vYXEpKmFxO2lmKHRoaXMubWluPTNEPTNEdGhpcy5fPQpkYXRhQm91bmRzLm1pbil7dGhp
cy5taW49M0R0aGlzLl9kYXRhQm91bmRzLm1pbi10aGlzLnRpY2tJbnRlcnZhbH10aGlzLm1heD0K
PTNETWF0aC5jZWlsKHRoaXMuX2RhdGFCb3VuZHMubWF4L2FxKSphcTtpZih0aGlzLm1heD0zRD0z
RHRoaXMuX2RhdGFCb3VuZHMuPQptYXgpe3RoaXMubWF4PTNEdGhpcy5fZGF0YUJvdW5kcy5tYXgr
dGhpcy50aWNrSW50ZXJ2YWx9dmFyIGFYPTNEKHRoaXMubWF4LXQ9Cmhpcy5taW4pL3RoaXMudGlj
a0ludGVydmFsO2FYPTNEYVgudG9GaXhlZCgxMSk7YVg9M0RNYXRoLmNlaWwoYVgpO3RoaXMubnVt
Yj0KZXJUaWNrcz0zRGFYKzF9ZWxzZXtpZihhNT0zRD0zRG51bGwpe3ZhciBhWD0zRCh0aGlzLl9k
YXRhQm91bmRzLm1heC10aGlzLm1pPQpuKS90aGlzLnRpY2tJbnRlcnZhbDthWD0zRGFYLnRvRml4
ZWQoMTEpO3RoaXMubnVtYmVyVGlja3M9M0RNYXRoLmNlaWwoYVgpKzI9Cjt0aGlzLm1heD0zRHRo
aXMubWluK3RoaXMudGlja0ludGVydmFsKih0aGlzLm51bWJlclRpY2tzLTEpfWVsc2V7aWYoYUg9
M0Q9Cj0zRG51bGwpe3ZhciBhWD0zRCh0aGlzLm1heC10aGlzLl9kYXRhQm91bmRzLm1pbikvdGhp
cy50aWNrSW50ZXJ2YWw7YVg9M0RhWD0KLnRvRml4ZWQoMTEpO3RoaXMubnVtYmVyVGlja3M9M0RN
YXRoLmNlaWwoYVgpKzI7dGhpcy5taW49M0R0aGlzLm1heC10aGlzLnRpPQpja0ludGVydmFsKih0
aGlzLm51bWJlclRpY2tzLTEpfWVsc2V7dGhpcy5udW1iZXJUaWNrcz0zRE1hdGguY2VpbCgoYTUt
YUgpL3Q9Cmhpcy50aWNrSW50ZXJ2YWwpKzE7dGhpcy5taW49M0RNYXRoLmZsb29yKGFIKk1hdGgu
cG93KDEwLGEzKSkvTWF0aC5wb3coMTAsYT0KMyk7dGhpcy5tYXg9M0RNYXRoLmNlaWwoYTUqTWF0
aC5wb3coMTAsYTMpKS9NYXRoLnBvdygxMCxhMyk7dGhpcy5udW1iZXJUaWNrPQpzPTNETWF0aC5j
ZWlsKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWwpKzF9fX19fX19fWlmKHRo
aXMuX292ZXI9CnJpZGVGb3JtYXRTdHJpbmcmJnRoaXMuX2F1dG9Gb3JtYXRTdHJpbmchPTNEIiIp
e3RoaXMudGlja09wdGlvbnM9M0R0aGlzLnRpYz0Ka09wdGlvbnN8fHt9O3RoaXMudGlja09wdGlv
bnMuZm9ybWF0U3RyaW5nPTNEdGhpcy5fYXV0b0Zvcm1hdFN0cmluZ312YXIgYVUsPQphODtmb3Io
dmFyIGEwPTNEMDthMDx0aGlzLm51bWJlclRpY2tzO2EwKyspe2E0PTNEdGhpcy5taW4rYTAqdGhp
cy50aWNrSW50ZXI9CnZhbDthVT0zRG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRp
b25zKTthVS5zZXRUaWNrKGE0LHRoaXMubmFtZSk7dD0KaGlzLl90aWNrcy5wdXNoKGFVKTtpZihh
MDx0aGlzLm51bWJlclRpY2tzLTEpe2Zvcih2YXIgYVo9M0QwO2FaPHRoaXMubWlub3JUPQppY2tz
O2FaKyspe2E0Kz0zRHRoaXMudGlja0ludGVydmFsLyh0aGlzLm1pbm9yVGlja3MrMSk7YTg9M0RM
LmV4dGVuZCh0cnVlLHs9Cn0sdGhpcy50aWNrT3B0aW9ucyx7bmFtZTp0aGlzLm5hbWUsdmFsdWU6
YTQsbGFiZWw6IiIsaXNNaW5vclRpY2s6dHJ1ZX0pO2FVPQo9M0RuZXcgdGhpcy50aWNrUmVuZGVy
ZXIoYTgpO3RoaXMuX3RpY2tzLnB1c2goYVUpfX1hVT0zRG51bGx9fWlmKHRoaXMudGlja0k9Cm5z
ZXQpe3RoaXMubWluPTNEdGhpcy5taW4tdGhpcy50aWNrSW5zZXQqdGhpcy50aWNrSW50ZXJ2YWw7
dGhpcy5tYXg9M0R0aGlzLj0KbWF4K3RoaXMudGlja0luc2V0KnRoaXMudGlja0ludGVydmFsfWFU
PTNEbnVsbH07TC5qcXBsb3QuTGluZWFyQXhpc1JlbmRlcmVyPQoucHJvdG90eXBlLnJlc2V0VGlj
a1ZhbHVlcz0zRGZ1bmN0aW9uKGFqKXtpZihMLmlzQXJyYXkoYWopJiZhai5sZW5ndGg9M0Q9M0Q9
CnRoaXMuX3RpY2tzLmxlbmd0aCl7dmFyIGFpO2Zvcih2YXIgYWg9M0QwO2FoPGFqLmxlbmd0aDth
aCsrKXthaT0zRHRoaXMuX3RpYz0Ka3NbYWhdO2FpLnZhbHVlPTNEYWpbYWhdO2FpLmxhYmVsPTNE
YWkuZm9ybWF0dGVyKGFpLmZvcm1hdFN0cmluZyxhalthaF0pO2FpPQoubGFiZWw9M0RhaS5wcmVm
aXgrYWkubGFiZWw7YWkuX2VsZW0uaHRtbChhaS5sYWJlbCl9YWk9M0RudWxsO3RoaXMubWluPTNE
TC49CmpxcGxvdC5hcnJheU1pbihhaik7dGhpcy5tYXg9M0RMLmpxcGxvdC5hcnJheU1heChhaik7
dGhpcy5wYWNrKCl9fTtMLmpxcGxvdD0KLkxpbmVhckF4aXNSZW5kZXJlci5wcm90b3R5cGUucGFj
az0zRGZ1bmN0aW9uKGFqLGFpKXthaj0zRGFqfHx7fTthaT0zRGFpfHx0PQpoaXMuX29mZnNldHM7
dmFyIGF5PTNEdGhpcy5fdGlja3M7dmFyIGF1PTNEdGhpcy5tYXg7dmFyIGF0PTNEdGhpcy5taW47
dmFyIGE9Cm89M0RhaS5tYXg7dmFyIGFtPTNEYWkubWluO3ZhciBhcT0zRCh0aGlzLl9sYWJlbD0z
RD0zRG51bGwpP2ZhbHNlOnRoaXMuX2xhYj0KZWwuc2hvdztmb3IodmFyIGFyIGluIGFqKXt0aGlz
Ll9lbGVtLmNzcyhhcixhalthcl0pfXRoaXMuX29mZnNldHM9M0RhaTt2YXIgPQphaz0zRGFvLWFt
O3ZhciBhbD0zRGF1LWF0O2lmKHRoaXMuYnJlYWtQb2ludHMpe2FsPTNEYWwtdGhpcy5icmVha1Bv
aW50c1sxXSs9CnRoaXMuYnJlYWtQb2ludHNbMF07dGhpcy5wMnU9M0RmdW5jdGlvbihhQSl7cmV0
dXJuKGFBLWFtKSphbC9haythdH07dGhpcy51Mj0KcD0zRGZ1bmN0aW9uKGFBKXtpZihhQT50aGlz
LmJyZWFrUG9pbnRzWzBdJiZhQTx0aGlzLmJyZWFrUG9pbnRzWzFdKXthQT0zRHRoPQppcy5icmVh
a1BvaW50c1swXX1pZihhQTw9M0R0aGlzLmJyZWFrUG9pbnRzWzBdKXtyZXR1cm4oYUEtYXQpKmFr
L2FsK2FtfWVsc2U9CntyZXR1cm4oYUEtdGhpcy5icmVha1BvaW50c1sxXSt0aGlzLmJyZWFrUG9p
bnRzWzBdLWF0KSphay9hbCthbX19O2lmKHRoaXMubj0KYW1lLmNoYXJBdCgwKT0zRD0zRCJ4Iil7
dGhpcy5zZXJpZXNfdTJwPTNEZnVuY3Rpb24oYUEpe2lmKGFBPnRoaXMuYnJlYWtQb2luPQp0c1sw
XSYmYUE8dGhpcy5icmVha1BvaW50c1sxXSl7YUE9M0R0aGlzLmJyZWFrUG9pbnRzWzBdfWlmKGFB
PD0zRHRoaXMuYnJlYWs9ClBvaW50c1swXSl7cmV0dXJuKGFBLWF0KSphay9hbH1lbHNle3JldHVy
bihhQS10aGlzLmJyZWFrUG9pbnRzWzFdK3RoaXMuYnJlYT0Ka1BvaW50c1swXS1hdCkqYWsvYWx9
fTt0aGlzLnNlcmllc19wMnU9M0RmdW5jdGlvbihhQSl7cmV0dXJuIGFBKmFsL2FrK2F0fX1lPQps
c2V7dGhpcy5zZXJpZXNfdTJwPTNEZnVuY3Rpb24oYUEpe2lmKGFBPnRoaXMuYnJlYWtQb2ludHNb
MF0mJmFBPHRoaXMuYnJlYWs9ClBvaW50c1sxXSl7YUE9M0R0aGlzLmJyZWFrUG9pbnRzWzBdfWlm
KGFBPj0zRHRoaXMuYnJlYWtQb2ludHNbMV0pe3JldHVybihhQT0KLWF1KSphay9hbH1lbHNle3Jl
dHVybihhQSt0aGlzLmJyZWFrUG9pbnRzWzFdLXRoaXMuYnJlYWtQb2ludHNbMF0tYXUpKmFrL2Fs
PQp9fTt0aGlzLnNlcmllc19wMnU9M0RmdW5jdGlvbihhQSl7cmV0dXJuIGFBKmFsL2FrK2F1fX19
ZWxzZXt0aGlzLnAydT0zRGZ1bmM9CnRpb24oYUEpe3JldHVybihhQS1hbSkqYWwvYWsrYXR9O3Ro
aXMudTJwPTNEZnVuY3Rpb24oYUEpe3JldHVybihhQS1hdCkqYWsvYT0KbCthbX07aWYodGhpcy5u
YW1lPTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIngyYXhpcyIpe3RoaXMuc2VyaWVzX3Uy
cD0KPTNEZnVuY3Rpb24oYUEpe3JldHVybihhQS1hdCkqYWsvYWx9O3RoaXMuc2VyaWVzX3AydT0z
RGZ1bmN0aW9uKGFBKXtyZXR1cm4gPQphQSphbC9haythdH19ZWxzZXt0aGlzLnNlcmllc191MnA9
M0RmdW5jdGlvbihhQSl7cmV0dXJuKGFBLWF1KSphay9hbH07dGhpcy49CnNlcmllc19wMnU9M0Rm
dW5jdGlvbihhQSl7cmV0dXJuIGFBKmFsL2FrK2F1fX19aWYodGhpcy5zaG93KXtpZih0aGlzLm5h
bWU9Cj0zRD0zRCJ4YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4aXMiKXtmb3IodmFyIGF2PTNE
MDthdjxheS5sZW5ndGg7YXYrKyl7dj0KYXIgYXA9M0RheVthdl07aWYoYXAuc2hvdyYmYXAuc2hv
d0xhYmVsKXt2YXIgYWg7aWYoYXAuY29uc3RydWN0b3I9M0Q9M0RMLmpxPQpwbG90LkNhbnZhc0F4
aXNUaWNrUmVuZGVyZXImJmFwLmFuZ2xlKXt2YXIgYXg9M0QodGhpcy5uYW1lPTNEPTNEInhheGlz
Iik/MTo9Ci0xO3N3aXRjaChhcC5sYWJlbFBvc2l0aW9uKXtjYXNlImF1dG8iOmlmKGF4KmFwLmFu
Z2xlPDApe2FoPTNELWFwLmdldFdpZHRoKD0KKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRo
LnNpbigtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2FoPTNELWFwPQouX3RleHRSZW5k
ZXJlci5oZWlnaHQqTWF0aC5zaW4oYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNl
ImVuZCI6YWg9Cj0zRC1hcC5nZXRXaWR0aCgpK2FwLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGgu
c2luKC1hcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKT0KLzI7YnJlYWs7Y2FzZSJzdGFydCI6YWg9M0Qt
YXAuX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oYXAuX3RleHRSZW5kZXJlPQpyLmFuZ2xl
KS8yO2JyZWFrO2Nhc2UibWlkZGxlIjphaD0zRC1hcC5nZXRXaWR0aCgpLzIrYXAuX3RleHRSZW5k
ZXJlci5oZWlnaHQ9CipNYXRoLnNpbigtYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMjticmVhaztk
ZWZhdWx0OmFoPTNELWFwLmdldFdpZHRoKCkvMithcD0KLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1h
dGguc2luKC1hcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrfX1lbHNle2FoPTNEPQotYXAu
Z2V0V2lkdGgoKS8yfXZhciBhej0zRHRoaXMudTJwKGFwLnZhbHVlKSthaCsicHgiO2FwLl9lbGVt
LmNzcygibGVmdCIsYXo9Cik7YXAucGFjaygpfX1pZihhcSl7dmFyIGFuPTNEdGhpcy5fbGFiZWwu
X2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTt0aGlzLl9sYWJlbD0KLl9lbGVtLmNzcygibGVmdCIsYW0r
YWsvMi1hbi8yKyJweCIpO2lmKHRoaXMubmFtZT0zRD0zRCJ4YXhpcyIpe3RoaXMuX2xhYmVsPQou
X2VsZW0uY3NzKCJib3R0b20iLCIwcHgiKX1lbHNle3RoaXMuX2xhYmVsLl9lbGVtLmNzcygidG9w
IiwiMHB4Iil9dGhpcy5fbGE9CmJlbC5wYWNrKCl9fWVsc2V7Zm9yKHZhciBhdj0zRDA7YXY8YXku
bGVuZ3RoO2F2Kyspe3ZhciBhcD0zRGF5W2F2XTtpZihhcC5zaD0Kb3cmJmFwLnNob3dMYWJlbCl7
dmFyIGFoO2lmKGFwLmNvbnN0cnVjdG9yPTNEPTNETC5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5k
PQplcmVyJiZhcC5hbmdsZSl7dmFyIGF4PTNEKHRoaXMubmFtZT0zRD0zRCJ5YXhpcyIpPzE6LTE7
c3dpdGNoKGFwLmxhYmVsUG9zaXQ9Cmlvbil7Y2FzZSJhdXRvIjpjYXNlImVuZCI6aWYoYXgqYXAu
YW5nbGU8MCl7YWg9M0QtYXAuX3RleHRSZW5kZXJlci5oZWlnaHQqTT0KYXRoLmNvcygtYXAuX3Rl
eHRSZW5kZXJlci5hbmdsZSkvMn1lbHNle2FoPTNELWFwLmdldEhlaWdodCgpK2FwLl90ZXh0UmVu
ZGVyPQplci5oZWlnaHQqTWF0aC5jb3MoYXAuX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztj
YXNlInN0YXJ0IjppZihhcC5hbmdsZT49CjApe2FoPTNELWFwLl90ZXh0UmVuZGVyZXIuaGVpZ2h0
Kk1hdGguY29zKC1hcC5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVsc2V7YT0KaD0zRC1hcC5nZXRI
ZWlnaHQoKSthcC5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhhcC5fdGV4dFJlbmRlcmVy
LmFuZ2xlPQopLzJ9YnJlYWs7Y2FzZSJtaWRkbGUiOmFoPTNELWFwLmdldEhlaWdodCgpLzI7YnJl
YWs7ZGVmYXVsdDphaD0zRC1hcC5nZXRIZWk9CmdodCgpLzI7YnJlYWt9fWVsc2V7YWg9M0QtYXAu
Z2V0SGVpZ2h0KCkvMn12YXIgYXo9M0R0aGlzLnUycChhcC52YWx1ZSkrYWgrIj0KcHgiO2FwLl9l
bGVtLmNzcygidG9wIixheik7YXAucGFjaygpfX1pZihhcSl7dmFyIGF3PTNEdGhpcy5fbGFiZWwu
X2VsZW0ub3V0PQplckhlaWdodCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoInRvcCIsYW8t
YWsvMi1hdy8yKyJweCIpO2lmKHRoaXMubmFtZT0KPTNEPTNEInlheGlzIil7dGhpcy5fbGFiZWwu
X2VsZW0uY3NzKCJsZWZ0IiwiMHB4Iil9ZWxzZXt0aGlzLl9sYWJlbC5fZWxlbS5jPQpzcygicmln
aHQiLCIwcHgiKX10aGlzLl9sYWJlbC5wYWNrKCl9fX1heT0zRG51bGx9O2Z1bmN0aW9uIGkoYWkp
e3ZhciBhaDthaT0KPTNETWF0aC5hYnMoYWkpO2lmKGFpPj0zRDEwKXthaD0zRCIlZCJ9ZWxzZXtp
ZihhaT4xKXtpZihhaT0zRD0zRD0zRHBhcnNlSW50PQooYWksMTApKXthaD0zRCIlZCJ9ZWxzZXth
aD0zRCIlLjFmIn19ZWxzZXt2YXIgYWo9M0QtTWF0aC5mbG9vcihNYXRoLmxvZyhhaSk9Ci9NYXRo
LkxOMTApO2FoPTNEIiUuIithaisiZiJ9fXJldHVybiBhaH12YXIgYj0zRFswLjEsMC4yLDAuMyww
LjQsMC41LDAuOCwxLD0KMiwzLDQsNV07dmFyIGM9M0RmdW5jdGlvbihhaSl7dmFyIGFoPTNEYi5p
bmRleE9mKGFpKTtpZihhaD4wKXtyZXR1cm4gYlthaC0xPQpdfWVsc2V7cmV0dXJuIGJbYi5sZW5n
dGgtMV0vMTAwfX07dmFyIGs9M0RmdW5jdGlvbihhaSl7dmFyIGFoPTNEYi5pbmRleE9mKGE9Cmkp
O2lmKGFoPGIubGVuZ3RoLTEpe3JldHVybiBiW2FoKzFdfWVsc2V7cmV0dXJuIGJbMF0qMTAwfX07
ZnVuY3Rpb24gZChhbCxhdT0KLGF0KXt2YXIgYXE9M0RNYXRoLmZsb29yKGF0LzIpO3ZhciBhaT0z
RE1hdGguY2VpbChhdCoxLjUpO3ZhciBhaz0zRE51bWJlci5NPQpBWF9WQUxVRTt2YXIgYWg9M0Qo
YXUtYWwpO3ZhciBheDt2YXIgYXA7dmFyIGFyO3ZhciBheT0zREwuanFwbG90LmdldFNpZ25pZmk9
CmNhbnRGaWd1cmVzO3ZhciBhdzt2YXIgYW47dmFyIGFvO3ZhciBhdjtmb3IodmFyIGFtPTNEMCxh
aj0zRGFpLWFxKzE7YW08YWo7YT0KbSsrKXthbz0zRGFxK2FtO2F4PTNEYWgvKGFvLTEpO2FwPTNE
YXkoYXgpO2F4PTNETWF0aC5hYnMoYXQtYW8pK2FwLmRpZ2l0c1JpPQpnaHQ7aWYoYXg8YWspe2Fr
PTNEYXg7YXI9M0Rhbzthdj0zRGFwLmRpZ2l0c1JpZ2h0fWVsc2V7aWYoYXg9M0Q9M0Q9M0Rhayl7
aWY9CihhcC5kaWdpdHNSaWdodDxhdil7YXI9M0Rhbzthdj0zRGFwLmRpZ2l0c1JpZ2h0fX19fWF3
PTNETWF0aC5tYXgoYXYsTWF0aC5tYT0KeChheShhbCkuZGlnaXRzUmlnaHQsYXkoYXUpLmRpZ2l0
c1JpZ2h0KSk7aWYoYXc9M0Q9M0Q9M0QwKXthbj0zRCIlZCJ9ZWxzZXthPQpuPTNEIiUuIithdysi
ZiJ9YXg9M0RhaC8oYXItMSk7cmV0dXJuW2FsLGF1LGFyLGFuLGF4XX1mdW5jdGlvbiBXKGFpLGFs
KXthbD0KPTNEYWx8fDc7dmFyIGFrPTNEYWkvKGFsLTEpO3ZhciBhaj0zRE1hdGgucG93KDEwLE1h
dGguZmxvb3IoTWF0aC5sb2coYWspL01hPQp0aC5MTjEwKSk7dmFyIGFtPTNEYWsvYWo7dmFyIGFo
O2lmKGFqPDEpe2lmKGFtPjUpe2FoPTNEMTAqYWp9ZWxzZXtpZihhbT4yKXs9CmFoPTNENSphan1l
bHNle2lmKGFtPjEpe2FoPTNEMiphan1lbHNle2FoPTNEYWp9fX19ZWxzZXtpZihhbT41KXthaD0z
RDEwKmFqfT0KZWxzZXtpZihhbT40KXthaD0zRDUqYWp9ZWxzZXtpZihhbT4zKXthaD0zRDQqYWp9
ZWxzZXtpZihhbT4yKXthaD0zRDMqYWp9ZWxzPQple2lmKGFtPjEpe2FoPTNEMiphan1lbHNle2Fo
PTNEYWp9fX19fX1yZXR1cm4gYWh9ZnVuY3Rpb24gUShhaSxhaCl7YWg9M0RhaHw9CnwxO3ZhciBh
az0zRE1hdGguZmxvb3IoTWF0aC5sb2coYWkpL01hdGguTE4xMCk7dmFyIGFtPTNETWF0aC5wb3co
MTAsYWspO3Zhcj0KIGFsPTNEYWkvYW07dmFyIGFqO2FsPTNEYWwvYWg7aWYoYWw8PTNEMC4zOCl7
YWo9M0QwLjF9ZWxzZXtpZihhbDw9M0QxLjYpe2FqPQo9M0QwLjJ9ZWxzZXtpZihhbDw9M0Q0KXth
aj0zRDAuNX1lbHNle2lmKGFsPD0zRDgpe2FqPTNEMX1lbHNle2lmKGFsPD0zRDE2KXs9CmFqPTNE
Mn1lbHNle2FqPTNENX19fX19cmV0dXJuIGFqKmFtfWZ1bmN0aW9uIHgoYWosYWkpe3ZhciBhbD0z
RE1hdGguZmxvb3IoTT0KYXRoLmxvZyhhaikvTWF0aC5MTjEwKTt2YXIgYW49M0RNYXRoLnBvdygx
MCxhbCk7dmFyIGFtPTNEYWovYW47dmFyIGFoO3ZhciBhPQprO2FtPTNEYW0vYWk7aWYoYW08PTNE
MC4zOCl7YWs9M0QwLjF9ZWxzZXtpZihhbTw9M0QxLjYpe2FrPTNEMC4yfWVsc2V7aWYoYW09Cjw9
M0Q0KXthaz0zRDAuNX1lbHNle2lmKGFtPD0zRDgpe2FrPTNEMX1lbHNle2lmKGFtPD0zRDE2KXth
az0zRDJ9ZWxzZXthaz0zRD0KNX19fX19YWg9M0RhayphbjtyZXR1cm5bYWgsYWssYW5dfUwuanFw
bG90LkxpbmVhclRpY2tHZW5lcmF0b3I9M0RmdW5jdGlvbihhPQpuLGFxLGFqLGFrLGFvLGFyKXth
bz0zRChhbz0zRD0zRD0zRG51bGwpP2ZhbHNlOmFvO2FyPTNEKGFyPTNEPTNEPTNEbnVsbHx8YW89
Cik/ZmFsc2U6YXI7aWYoYW49M0Q9M0Q9M0RhcSl7YXE9M0QoYXEpPzA6MX1haj0zRGFqfHwxO2lm
KGFxPGFuKXt2YXIgYXQ9M0RhcT0KO2FxPTNEYW47YW49M0RhdH12YXIgYWk9M0RbXTt2YXIgYXc9
M0RRKGFxLWFuLGFqKTt2YXIgYXY9M0RMLmpxcGxvdC5nZXRTaWduPQppZmljYW50RmlndXJlcztp
Zihhaz0zRD0zRG51bGwpe2lmKCFhbyYmIWFyKXthaVswXT0zRE1hdGguZmxvb3IoYW4vYXcpKmF3
O2E9CmlbMV09M0RNYXRoLmNlaWwoYXEvYXcpKmF3O2FpWzJdPTNETWF0aC5yb3VuZCgoYWlbMV0t
YWlbMF0pL2F3KzEpO2FpWzNdPTNEaT0KKGF3KTthaVs0XT0zRGF3fWVsc2V7aWYoYW8pe2FpWzBd
PTNEYW47YWlbMl09M0RNYXRoLmNlaWwoKGFxLWFuKS9hdysxKTthaVsxPQpdPTNEYW4rKGFpWzJd
LTEpKmF3O3ZhciBhdT0zRGF2KGFuKS5kaWdpdHNSaWdodDt2YXIgYXA9M0RhdihhdykuZGlnaXRz
UmlnaHQ9CjtpZihhdTxhcCl7YWlbM109M0RpKGF3KX1lbHNle2FpWzNdPTNEIiUuIithdSsiZiJ9
YWlbNF09M0Rhd31lbHNle2lmKGFyKXthaT0KWzFdPTNEYXE7YWlbMl09M0RNYXRoLmNlaWwoKGFx
LWFuKS9hdysxKTthaVswXT0zRGFxLShhaVsyXS0xKSphdzt2YXIgYWw9M0RhPQp2KGFxKS5kaWdp
dHNSaWdodDt2YXIgYXA9M0RhdihhdykuZGlnaXRzUmlnaHQ7aWYoYWw8YXApe2FpWzNdPTNEaShh
dyl9ZWxzZXs9CmFpWzNdPTNEIiUuIithbCsiZiJ9YWlbNF09M0Rhd319fX1lbHNle3ZhciBhbT0z
RFtdO2FtWzBdPTNETWF0aC5mbG9vcihhbi9hdz0KKSphdzthbVsxXT0zRE1hdGguY2VpbChhcS9h
dykqYXc7YW1bMl09M0RNYXRoLnJvdW5kKChhbVsxXS1hbVswXSkvYXcrMSk7YW1bPQozXT0zRGko
YXcpO2FtWzRdPTNEYXc7aWYoYW1bMl09M0Q9M0Q9M0Rhayl7YWk9M0RhbX1lbHNle3ZhciBhaD0z
RFcoYW1bMV0tYW09ClswXSxhayk7YWlbMF09M0RhbVswXTthaVsyXT0zRGFrO2FpWzRdPTNEYWg7
YWlbM109M0RpKGFoKTthaVsxXT0zRGFpWzBdKyhhaT0KWzJdLTEpKmFpWzRdfX1yZXR1cm4gYWl9
O0wuanFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdExpbmVhckludGVydmFsPTNEPQpRO0wu
anFwbG90LkxpbmVhclRpY2tHZW5lcmF0b3IuYmVzdEludGVydmFsPTNEVztMLmpxcGxvdC5MaW5l
YXJUaWNrR2VuZXJhdG89CnIuYmVzdExpbmVhckNvbXBvbmVudHM9M0R4O0wuanFwbG90LkxpbmVh
clRpY2tHZW5lcmF0b3IuYmVzdENvbnN0cmFpbmVkSW50ZT0KcnZhbD0zRGQ7TC5qcXBsb3QuTWFy
a2VyUmVuZGVyZXI9M0RmdW5jdGlvbihhaCl7dGhpcy5zaG93PTNEdHJ1ZTt0aGlzLnN0eWxlPQo9
M0QiZmlsbGVkQ2lyY2xlIjt0aGlzLmxpbmVXaWR0aD0zRDI7dGhpcy5zaXplPTNEOTt0aGlzLmNv
bG9yPTNEIiM2NjY2NjYiO3Q9Cmhpcy5zaGFkb3c9M0R0cnVlO3RoaXMuc2hhZG93QW5nbGU9M0Q0
NTt0aGlzLnNoYWRvd09mZnNldD0zRDE7dGhpcy5zaGFkb3dEZT0KcHRoPTNEMzt0aGlzLnNoYWRv
d0FscGhhPTNEIjAuMDciO3RoaXMuc2hhZG93UmVuZGVyZXI9M0RuZXcgTC5qcXBsb3QuU2hhZG93
PQpSZW5kZXJlcigpO3RoaXMuc2hhcGVSZW5kZXJlcj0zRG5ldyBMLmpxcGxvdC5TaGFwZVJlbmRl
cmVyKCk7TC5leHRlbmQodHJ1ZSw9CnRoaXMsYWgpfTtMLmpxcGxvdC5NYXJrZXJSZW5kZXJlci5w
cm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0cj0KdWUsdGhpcyxhaCk7dmFy
IGFqPTNEe2FuZ2xlOnRoaXMuc2hhZG93QW5nbGUsb2Zmc2V0OnRoaXMuc2hhZG93T2Zmc2V0LGFs
cGhhPQo6dGhpcy5zaGFkb3dBbHBoYSxsaW5lV2lkdGg6dGhpcy5saW5lV2lkdGgsZGVwdGg6dGhp
cy5zaGFkb3dEZXB0aCxjbG9zZVBhdGg9Cjp0cnVlfTtpZih0aGlzLnN0eWxlLmluZGV4T2YoImZp
bGxlZCIpIT0zRC0xKXthai5maWxsPTNEdHJ1ZX1pZih0aGlzLnN0eWxlLj0KaW5kZXhPZigiaXJj
bGUiKSE9M0QtMSl7YWouaXNhcmM9M0R0cnVlO2FqLmNsb3NlUGF0aD0zRGZhbHNlfXRoaXMuc2hh
ZG93UmVuPQpkZXJlci5pbml0KGFqKTt2YXIgYWk9M0R7ZmlsbDpmYWxzZSxpc2FyYzpmYWxzZSxz
dHJva2VTdHlsZTp0aGlzLmNvbG9yLGZpbGw9ClN0eWxlOnRoaXMuY29sb3IsbGluZVdpZHRoOnRo
aXMubGluZVdpZHRoLGNsb3NlUGF0aDp0cnVlfTtpZih0aGlzLnN0eWxlLmluZD0KZXhPZigiZmls
bGVkIikhPTNELTEpe2FpLmZpbGw9M0R0cnVlfWlmKHRoaXMuc3R5bGUuaW5kZXhPZigiaXJjbGUi
KSE9M0QtMSl7PQphaS5pc2FyYz0zRHRydWU7YWkuY2xvc2VQYXRoPTNEZmFsc2V9dGhpcy5zaGFw
ZVJlbmRlcmVyLmluaXQoYWkpfTtMLmpxcGxvdC49Ck1hcmtlclJlbmRlcmVyLnByb3RvdHlwZS5k
cmF3RGlhbW9uZD0zRGZ1bmN0aW9uKGFqLGFpLGFtLGFsLGFvKXt2YXIgYWg9M0QxLj0KMjt2YXIg
YXA9M0R0aGlzLnNpemUvMi9haDt2YXIgYW49M0R0aGlzLnNpemUvMiphaDt2YXIgYWs9M0RbW2Fq
LWFwLGFpXSxbYWosPQphaSthbl0sW2FqK2FwLGFpXSxbYWosYWktYW5dXTtpZih0aGlzLnNoYWRv
dyl7dGhpcy5zaGFkb3dSZW5kZXJlci5kcmF3KGFtLGE9CmspfXRoaXMuc2hhcGVSZW5kZXJlci5k
cmF3KGFtLGFrLGFvKX07TC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYT0Kd1Bs
dXM9M0RmdW5jdGlvbihhayxhaixhbixhbSxhcSl7dmFyIGFpPTNEMTt2YXIgYXI9M0R0aGlzLnNp
emUvMiphaTt2YXIgYW89Cj0zRHRoaXMuc2l6ZS8yKmFpO3ZhciBhcD0zRFtbYWssYWotYW9dLFth
ayxhaithb11dO3ZhciBhbD0zRFtbYWsrYXIsYWpdLFthaz0KLWFyLGFqXV07dmFyIGFoPTNETC5l
eHRlbmQodHJ1ZSx7fSx0aGlzLm9wdGlvbnMse2Nsb3NlUGF0aDpmYWxzZX0pO2lmKHRoaXMuPQpz
aGFkb3cpe3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhbixhcCx7Y2xvc2VQYXRoOmZhbHNlfSk7
dGhpcy5zaGFkb3dSZW5kZXI9CmVyLmRyYXcoYW4sYWwse2Nsb3NlUGF0aDpmYWxzZX0pfXRoaXMu
c2hhcGVSZW5kZXJlci5kcmF3KGFuLGFwLGFoKTt0aGlzLnNoYT0KcGVSZW5kZXJlci5kcmF3KGFu
LGFsLGFoKX07TC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYXdYPTNEZnVuY3Rp
PQpvbihhayxhaixhbixhbSxhcSl7dmFyIGFpPTNEMTt2YXIgYXI9M0R0aGlzLnNpemUvMiphaTt2
YXIgYW89M0R0aGlzLnNpemUvMio9CmFpO3ZhciBhaD0zREwuZXh0ZW5kKHRydWUse30sdGhpcy5v
cHRpb25zLHtjbG9zZVBhdGg6ZmFsc2V9KTt2YXIgYXA9M0RbW2FrLT0KYXIsYWotYW9dLFthayth
cixhaithb11dO3ZhciBhbD0zRFtbYWstYXIsYWorYW9dLFthaythcixhai1hb11dO2lmKHRoaXMu
c2hhPQpkb3cpe3RoaXMuc2hhZG93UmVuZGVyZXIuZHJhdyhhbixhcCx7Y2xvc2VQYXRoOmZhbHNl
fSk7dGhpcy5zaGFkb3dSZW5kZXJlci49CmRyYXcoYW4sYWwse2Nsb3NlUGF0aDpmYWxzZX0pfXRo
aXMuc2hhcGVSZW5kZXJlci5kcmF3KGFuLGFwLGFoKTt0aGlzLnNoYXBlUj0KZW5kZXJlci5kcmF3
KGFuLGFsLGFoKX07TC5qcXBsb3QuTWFya2VyUmVuZGVyZXIucHJvdG90eXBlLmRyYXdEYXNoPTNE
ZnVuY3RpPQpvbihhaixhaSxhbSxhbCxhbyl7dmFyIGFoPTNEMTt2YXIgYXA9M0R0aGlzLnNpemUv
MiphaDt2YXIgYW49M0R0aGlzLnNpemUvMio9CmFoO3ZhciBhaz0zRFtbYWotYXAsYWldLFthaith
cCxhaV1dO2lmKHRoaXMuc2hhZG93KXt0aGlzLnNoYWRvd1JlbmRlcmVyLmRyYT0KdyhhbSxhayl9
dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYW0sYWssYW8pfTtMLmpxcGxvdC5NYXJrZXJSZW5kZXJl
ci5wcm90b3R5PQpwZS5kcmF3TGluZT0zRGZ1bmN0aW9uKGFtLGFsLGFoLGFrLGFpKXt2YXIgYWo9
M0RbYW0sYWxdO2lmKHRoaXMuc2hhZG93KXt0aGk9CnMuc2hhZG93UmVuZGVyZXIuZHJhdyhhaCxh
ail9dGhpcy5zaGFwZVJlbmRlcmVyLmRyYXcoYWgsYWosYWkpfTtMLmpxcGxvdC5NYT0KcmtlclJl
bmRlcmVyLnByb3RvdHlwZS5kcmF3U3F1YXJlPTNEZnVuY3Rpb24oYWosYWksYW0sYWwsYW8pe3Zh
ciBhaD0zRDE7dmFyPQogYXA9M0R0aGlzLnNpemUvMi9haDt2YXIgYW49M0R0aGlzLnNpemUvMiph
aDt2YXIgYWs9M0RbW2FqLWFwLGFpLWFuXSxbYWotYXA9CixhaSthbl0sW2FqK2FwLGFpK2FuXSxb
YWorYXAsYWktYW5dXTtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dSZW5kZXJlci5kcj0KYXco
YW0sYWspfXRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGFtLGFrLGFvKX07TC5qcXBsb3QuTWFya2Vy
UmVuZGVyZXIucHJvdG90PQp5cGUuZHJhd0NpcmNsZT0zRGZ1bmN0aW9uKGFpLGFvLGFrLGFuLGFs
KXt2YXIgYWg9M0R0aGlzLnNpemUvMjt2YXIgYWo9M0QyKk09CmF0aC5QSTt2YXIgYW09M0RbYWks
YW8sYWgsMCxhaix0cnVlXTtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dSZW5kZXJlci5kcj0K
YXcoYWssYW0pfXRoaXMuc2hhcGVSZW5kZXJlci5kcmF3KGFrLGFtLGFsKX07TC5qcXBsb3QuTWFy
a2VyUmVuZGVyZXIucHJvdG90PQp5cGUuZHJhdz0zRGZ1bmN0aW9uKGFoLGFrLGFpLGFqKXthaj0z
RGFqfHx7fTtpZihhai5zaG93PTNEPTNEbnVsbHx8YWouc2hvdyE9Cj0zRGZhbHNlKXtpZihhai5j
b2xvciYmIWFqLmZpbGxTdHlsZSl7YWouZmlsbFN0eWxlPTNEYWouY29sb3J9aWYoYWouY29sb3Im
Jj0KIWFqLnN0cm9rZVN0eWxlKXthai5zdHJva2VTdHlsZT0zRGFqLmNvbG9yfXN3aXRjaCh0aGlz
LnN0eWxlKXtjYXNlImRpYW1vbmQiPQo6dGhpcy5kcmF3RGlhbW9uZChhaCxhayxhaSxmYWxzZSxh
aik7YnJlYWs7Y2FzZSJmaWxsZWREaWFtb25kIjp0aGlzLmRyYXdEaWE9Cm1vbmQoYWgsYWssYWks
dHJ1ZSxhaik7YnJlYWs7Y2FzZSJjaXJjbGUiOnRoaXMuZHJhd0NpcmNsZShhaCxhayxhaSxmYWxz
ZSxhaj0KKTticmVhaztjYXNlImZpbGxlZENpcmNsZSI6dGhpcy5kcmF3Q2lyY2xlKGFoLGFrLGFp
LHRydWUsYWopO2JyZWFrO2Nhc2Uic3F1PQphcmUiOnRoaXMuZHJhd1NxdWFyZShhaCxhayxhaSxm
YWxzZSxhaik7YnJlYWs7Y2FzZSJmaWxsZWRTcXVhcmUiOnRoaXMuZHJhd1M9CnF1YXJlKGFoLGFr
LGFpLHRydWUsYWopO2JyZWFrO2Nhc2UieCI6dGhpcy5kcmF3WChhaCxhayxhaSx0cnVlLGFqKTti
cmVhaztjYT0Kc2UicGx1cyI6dGhpcy5kcmF3UGx1cyhhaCxhayxhaSx0cnVlLGFqKTticmVhaztj
YXNlImRhc2giOnRoaXMuZHJhd0Rhc2goYWgsPQphayxhaSx0cnVlLGFqKTticmVhaztjYXNlImxp
bmUiOnRoaXMuZHJhd0xpbmUoYWgsYWssYWksZmFsc2UsYWopO2JyZWFrO2RlZmE9CnVsdDp0aGlz
LmRyYXdEaWFtb25kKGFoLGFrLGFpLGZhbHNlLGFqKTticmVha319fTtMLmpxcGxvdC5TaGFkb3dS
ZW5kZXJlcj0zRD0KZnVuY3Rpb24oYWgpe3RoaXMuYW5nbGU9M0Q0NTt0aGlzLm9mZnNldD0zRDE7
dGhpcy5hbHBoYT0zRDAuMDc7dGhpcy5saW5lV2lkPQp0aD0zRDEuNTt0aGlzLmxpbmVKb2luPTNE
Im1pdGVyIjt0aGlzLmxpbmVDYXA9M0Qicm91bmQiO3RoaXMuY2xvc2VQYXRoPTNEZmE9CmxzZTt0
aGlzLmZpbGw9M0RmYWxzZTt0aGlzLmRlcHRoPTNEMzt0aGlzLnN0cm9rZVN0eWxlPTNEInJnYmEo
MCwwLDAsMC4xKSI7dD0KaGlzLmlzYXJjPTNEZmFsc2U7TC5leHRlbmQodHJ1ZSx0aGlzLGFoKX07
TC5qcXBsb3QuU2hhZG93UmVuZGVyZXIucHJvdG90eXBlPQouaW5pdD0zRGZ1bmN0aW9uKGFoKXtM
LmV4dGVuZCh0cnVlLHRoaXMsYWgpfTtMLmpxcGxvdC5TaGFkb3dSZW5kZXJlci5wcm90b3Q9Cnlw
ZS5kcmF3PTNEZnVuY3Rpb24oYXYsYXQsYXgpe2F2LnNhdmUoKTt2YXIgYWg9M0QoYXghPTNEbnVs
bCk/YXg6e307dmFyIGF1PQo9M0QoYWguZmlsbCE9M0RudWxsKT9haC5maWxsOnRoaXMuZmlsbDt2
YXIgYXA9M0QoYWguZmlsbFJlY3QhPTNEbnVsbCk/YWguZmk9CmxsUmVjdDp0aGlzLmZpbGxSZWN0
O3ZhciBhbz0zRChhaC5jbG9zZVBhdGghPTNEbnVsbCk/YWguY2xvc2VQYXRoOnRoaXMuY2xvcz0K
ZVBhdGg7dmFyIGFsPTNEKGFoLm9mZnNldCE9M0RudWxsKT9haC5vZmZzZXQ6dGhpcy5vZmZzZXQ7
dmFyIGFqPTNEKGFoLmFscGhhPQohPTNEbnVsbCk/YWguYWxwaGE6dGhpcy5hbHBoYTt2YXIgYW49
M0QoYWguZGVwdGghPTNEbnVsbCk/YWguZGVwdGg6dGhpcy5kZXA9CnRoO3ZhciBhdz0zRChhaC5p
c2FyYyE9M0RudWxsKT9haC5pc2FyYzp0aGlzLmlzYXJjO3ZhciBhcT0zRChhaC5saW5lUGF0dGVy
bj0KIT0zRG51bGwpP2FoLmxpbmVQYXR0ZXJuOnRoaXMubGluZVBhdHRlcm47YXYubGluZVdpZHRo
PTNEKGFoLmxpbmVXaWR0aCE9M0RuPQp1bGwpP2FoLmxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aDth
di5saW5lSm9pbj0zRChhaC5saW5lSm9pbiE9M0RudWxsKT9haC5saW49CmVKb2luOnRoaXMubGlu
ZUpvaW47YXYubGluZUNhcD0zRChhaC5saW5lQ2FwIT0zRG51bGwpP2FoLmxpbmVDYXA6dGhpcy5s
aW5lQz0KYXA7YXYuc3Ryb2tlU3R5bGU9M0RhaC5zdHJva2VTdHlsZXx8dGhpcy5zdHJva2VTdHls
ZXx8InJnYmEoMCwwLDAsIithaisiKSI7PQphdi5maWxsU3R5bGU9M0RhaC5maWxsU3R5bGV8fHRo
aXMuZmlsbFN0eWxlfHwicmdiYSgwLDAsMCwiK2FqKyIpIjtmb3IodmFyIGE9Cms9M0QwO2FrPGFu
O2FrKyspe3ZhciBhcj0zREwuanFwbG90LkxpbmVQYXR0ZXJuKGF2LGFxKTthdi50cmFuc2xhdGUo
TWF0aC5jbz0Kcyh0aGlzLmFuZ2xlKk1hdGguUEkvMTgwKSphbCxNYXRoLnNpbih0aGlzLmFuZ2xl
Kk1hdGguUEkvMTgwKSphbCk7YXIuYmVnaW5QPQphdGgoKTtpZihhdyl7YXYuYXJjKGF0WzBdLGF0
WzFdLGF0WzJdLGF0WzNdLGF0WzRdLHRydWUpfWVsc2V7aWYoYXApe2lmKGFwKXs9CmF2LmZpbGxS
ZWN0KGF0WzBdLGF0WzFdLGF0WzJdLGF0WzNdKX19ZWxzZXtpZihhdCYmYXQubGVuZ3RoKXt2YXIg
YWk9M0R0cnVlOz0KZm9yKHZhciBhbT0zRDA7YW08YXQubGVuZ3RoO2FtKyspe2lmKGF0W2FtXVsw
XSE9M0RudWxsJiZhdFthbV1bMV0hPTNEbnVsbCl7PQppZihhaSl7YXIubW92ZVRvKGF0W2FtXVsw
XSxhdFthbV1bMV0pO2FpPTNEZmFsc2V9ZWxzZXthci5saW5lVG8oYXRbYW1dWzBdLGE9CnRbYW1d
WzFdKX19ZWxzZXthaT0zRHRydWV9fX19fWlmKGFvKXthci5jbG9zZVBhdGgoKX1pZihhdSl7YXYu
ZmlsbCgpfWVsc2V7YT0Kdi5zdHJva2UoKX19YXYucmVzdG9yZSgpfTtMLmpxcGxvdC5TaGFwZVJl
bmRlcmVyPTNEZnVuY3Rpb24oYWgpe3RoaXMubGluZVdpPQpkdGg9M0QxLjU7dGhpcy5saW5lUGF0
dGVybj0zRCJzb2xpZCI7dGhpcy5saW5lSm9pbj0zRCJtaXRlciI7dGhpcy5saW5lQ2FwPQo9M0Qi
cm91bmQiO3RoaXMuY2xvc2VQYXRoPTNEZmFsc2U7dGhpcy5maWxsPTNEZmFsc2U7dGhpcy5pc2Fy
Yz0zRGZhbHNlO3RoaXM9Ci5maWxsUmVjdD0zRGZhbHNlO3RoaXMuc3Ryb2tlUmVjdD0zRGZhbHNl
O3RoaXMuY2xlYXJSZWN0PTNEZmFsc2U7dGhpcy5zdHJvaz0KZVN0eWxlPTNEIiM5OTk5OTkiO3Ro
aXMuZmlsbFN0eWxlPTNEIiM5OTk5OTkiO0wuZXh0ZW5kKHRydWUsdGhpcyxhaCl9O0wuanFwPQps
b3QuU2hhcGVSZW5kZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKGFoKXtMLmV4dGVuZCh0
cnVlLHRoaXMsYWgpfTtMLmo9CnFwbG90LlNoYXBlUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9M0Rm
dW5jdGlvbihhdCxhcSxhdil7YXQuc2F2ZSgpO3ZhciBhaD0zRD0KKGF2IT0zRG51bGwpP2F2Ont9
O3ZhciBhcj0zRChhaC5maWxsIT0zRG51bGwpP2FoLmZpbGw6dGhpcy5maWxsO3ZhciBhbT0zRChh
PQpoLmNsb3NlUGF0aCE9M0RudWxsKT9haC5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGg7dmFyIGFu
PTNEKGFoLmZpbGxSZWN0IT0zRG49CnVsbCk/YWguZmlsbFJlY3Q6dGhpcy5maWxsUmVjdDt2YXIg
YWs9M0QoYWguc3Ryb2tlUmVjdCE9M0RudWxsKT9haC5zdHJva2VSZT0KY3Q6dGhpcy5zdHJva2VS
ZWN0O3ZhciBhaT0zRChhaC5jbGVhclJlY3QhPTNEbnVsbCk/YWguY2xlYXJSZWN0OnRoaXMuY2xl
YXJSPQplY3Q7dmFyIGF1PTNEKGFoLmlzYXJjIT0zRG51bGwpP2FoLmlzYXJjOnRoaXMuaXNhcmM7
dmFyIGFvPTNEKGFoLmxpbmVQYXR0ZXI9Cm4hPTNEbnVsbCk/YWgubGluZVBhdHRlcm46dGhpcy5s
aW5lUGF0dGVybjt2YXIgYXA9M0RMLmpxcGxvdC5MaW5lUGF0dGVybihhdD0KLGFvKTthdC5saW5l
V2lkdGg9M0RhaC5saW5lV2lkdGh8fHRoaXMubGluZVdpZHRoO2F0LmxpbmVKb2luPTNEYWgubGlu
ZUpvaW58PQp8dGhpcy5saW5lSm9pbjthdC5saW5lQ2FwPTNEYWgubGluZUNhcHx8dGhpcy5saW5l
Q2FwO2F0LnN0cm9rZVN0eWxlPTNEKGFoLnM9CnRyb2tlU3R5bGV8fGFoLmNvbG9yKXx8dGhpcy5z
dHJva2VTdHlsZTthdC5maWxsU3R5bGU9M0RhaC5maWxsU3R5bGV8fHRoaXMuZj0KaWxsU3R5bGU7
YXQuYmVnaW5QYXRoKCk7aWYoYXUpe2F0LmFyYyhhcVswXSxhcVsxXSxhcVsyXSxhcVszXSxhcVs0
XSx0cnVlKTtpPQpmKGFtKXthdC5jbG9zZVBhdGgoKX1pZihhcil7YXQuZmlsbCgpfWVsc2V7YXQu
c3Ryb2tlKCl9YXQucmVzdG9yZSgpO3JldHVybn09CmVsc2V7aWYoYWkpe2F0LmNsZWFyUmVjdChh
cVswXSxhcVsxXSxhcVsyXSxhcVszXSk7YXQucmVzdG9yZSgpO3JldHVybn1lbHNlez0KaWYoYW58
fGFrKXtpZihhbil7YXQuZmlsbFJlY3QoYXFbMF0sYXFbMV0sYXFbMl0sYXFbM10pfWlmKGFrKXth
dC5zdHJva2VSZWN0PQooYXFbMF0sYXFbMV0sYXFbMl0sYXFbM10pO2F0LnJlc3RvcmUoKTtyZXR1
cm59fWVsc2V7aWYoYXEmJmFxLmxlbmd0aCl7dmFyIGE9Cmo9M0R0cnVlO2Zvcih2YXIgYWw9M0Qw
O2FsPGFxLmxlbmd0aDthbCsrKXtpZihhcVthbF1bMF0hPTNEbnVsbCYmYXFbYWxdWzFdIT0KPTNE
bnVsbCl7aWYoYWope2FwLm1vdmVUbyhhcVthbF1bMF0sYXFbYWxdWzFdKTthaj0zRGZhbHNlfWVs
c2V7YXAubGluZVRvKGFxPQpbYWxdWzBdLGFxW2FsXVsxXSl9fWVsc2V7YWo9M0R0cnVlfX1pZihh
bSl7YXAuY2xvc2VQYXRoKCl9aWYoYXIpe2F0LmZpbGwoKX09CmVsc2V7YXQuc3Ryb2tlKCl9fX19
fWF0LnJlc3RvcmUoKX07TC5qcXBsb3QuVGFibGVMZWdlbmRSZW5kZXJlcj0zRGZ1bmN0aW9uKD0K
KXt9O0wuanFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlv
bihhaCl7TC5leHRlbmQodHJ1PQplLHRoaXMsYWgpfTtMLmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRl
cmVyLnByb3RvdHlwZS5hZGRyb3c9M0RmdW5jdGlvbihhcSxhayw9CmFoLGFvKXt2YXIgYWw9M0Qo
YWgpP3RoaXMucm93U3BhY2luZysicHgiOiIwcHgiO3ZhciBhcDt2YXIgYWo7dmFyIGFpO3ZhciBh
bj0KO3ZhciBhbTthaT0zRGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7YXA9M0RMKGFpKTth
cC5hZGRDbGFzcygianFwbG90LXRhPQpibGUtbGVnZW5kIik7YWk9M0RudWxsO2lmKGFvKXthcC5w
cmVwZW5kVG8odGhpcy5fZWxlbSl9ZWxzZXthcC5hcHBlbmRUbyh0aGk9CnMuX2VsZW0pfWlmKHRo
aXMuc2hvd1N3YXRjaGVzKXthaj0zREwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSk7YWou
YWRkQz0KbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCBqcXBsb3QtdGFibGUtbGVnZW5kLXN3YXRj
aCIpO2FqLmNzcyh7dGV4dEFsaWduOiJjPQplbnRlciIscGFkZGluZ1RvcDphbH0pO2FuPTNETChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7YW4uYWRkQ2xhc3MoImo9CnFwbG90LXRhYmxl
LWxlZ2VuZC1zd2F0Y2gtb3V0bGluZSIpO2FtPTNETChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKSk7YT0KbS5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZC1zd2F0Y2giKTthbS5jc3Mo
e2JhY2tncm91bmRDb2xvcjphayxib3JkZXJDPQpvbG9yOmFrfSk7YXAuYXBwZW5kKGFqLmFwcGVu
ZChhbi5hcHBlbmQoYW0pKSl9aWYodGhpcy5zaG93TGFiZWxzKXthaj0zREwoZG89CmN1bWVudC5j
cmVhdGVFbGVtZW50KCJ0ZCIpKTthai5hZGRDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCBqcXBs
b3QtdGFibGUtbD0KZWdlbmQtbGFiZWwiKTthai5jc3MoInBhZGRpbmdUb3AiLGFsKTthcC5hcHBl
bmQoYWopO2lmKHRoaXMuZXNjYXBlSHRtbCl7YWouPQp0ZXh0KGFxKX1lbHNle2FqLmh0bWwoYXEp
fX1haj0zRG51bGw7YW49M0RudWxsO2FtPTNEbnVsbDthcD0zRG51bGw7YWk9M0RudWw9Cmx9O0wu
anFwbG90LlRhYmxlTGVnZW5kUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9M0RmdW5jdGlvbigpe2lm
KHRoaXMuX2VsZW0pez0KdGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5fZWxlbT0zRG51bGx9
aWYodGhpcy5zaG93KXt2YXIgYW09M0R0aGlzLl9zZXJpPQplczt2YXIgYWk9M0Rkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJ0YWJsZSIpO3RoaXMuX2VsZW09M0RMKGFpKTt0aGlzLl9lbGVtLmE9CmRk
Q2xhc3MoImpxcGxvdC10YWJsZS1sZWdlbmQiKTt2YXIgYXI9M0R7cG9zaXRpb246ImFic29sdXRl
In07aWYodGhpcy5iYWNrZz0Kcm91bmQpe2FyLmJhY2tncm91bmQ9M0R0aGlzLmJhY2tncm91bmR9
aWYodGhpcy5ib3JkZXIpe2FyLmJvcmRlcj0zRHRoaXMuYm9yPQpkZXJ9aWYodGhpcy5mb250U2l6
ZSl7YXIuZm9udFNpemU9M0R0aGlzLmZvbnRTaXplfWlmKHRoaXMuZm9udEZhbWlseSl7YXIuZm89
Cm50RmFtaWx5PTNEdGhpcy5mb250RmFtaWx5fWlmKHRoaXMudGV4dENvbG9yKXthci50ZXh0Q29s
b3I9M0R0aGlzLnRleHRDb2xvcj0KfWlmKHRoaXMubWFyZ2luVG9wIT0zRG51bGwpe2FyLm1hcmdp
blRvcD0zRHRoaXMubWFyZ2luVG9wfWlmKHRoaXMubWFyZ2luQm90PQp0b20hPTNEbnVsbCl7YXIu
bWFyZ2luQm90dG9tPTNEdGhpcy5tYXJnaW5Cb3R0b219aWYodGhpcy5tYXJnaW5MZWZ0IT0zRG51
bGw9Cil7YXIubWFyZ2luTGVmdD0zRHRoaXMubWFyZ2luTGVmdH1pZih0aGlzLm1hcmdpblJpZ2h0
IT0zRG51bGwpe2FyLm1hcmdpblJpZz0KaHQ9M0R0aGlzLm1hcmdpblJpZ2h0fXZhciBhaD0zRGZh
bHNlLGFvPTNEZmFsc2UsYXE7Zm9yKHZhciBhbj0zRDA7YW48YW0ubGVuPQpndGg7YW4rKyl7YXE9
M0RhbVthbl07aWYoYXEuX3N0YWNrfHxhcS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj0zRD0zREwuanFw
bG90LkI9CmV6aWVyQ3VydmVSZW5kZXJlcil7YW89M0R0cnVlfWlmKGFxLnNob3cmJmFxLnNob3dM
YWJlbCl7dmFyIGFsPTNEdGhpcy5sYWJlbD0Kc1thbl18fGFxLmxhYmVsLnRvU3RyaW5nKCk7aWYo
YWwpe3ZhciBhaj0zRGFxLmNvbG9yO2lmKGFvJiZhbjxhbS5sZW5ndGgtMSl7PQphaD0zRHRydWV9
ZWxzZXtpZihhbyYmYW49M0Q9M0RhbS5sZW5ndGgtMSl7YWg9M0RmYWxzZX19dGhpcy5yZW5kZXJl
ci5hZGRyb3c9Ci5jYWxsKHRoaXMsYWwsYWosYWgsYW8pO2FoPTNEdHJ1ZX1mb3IodmFyIGFrPTNE
MDthazxMLmpxcGxvdC5hZGRMZWdlbmRSb3dIbz0Kb2tzLmxlbmd0aDthaysrKXt2YXIgYXA9M0RM
LmpxcGxvdC5hZGRMZWdlbmRSb3dIb29rc1tha10uY2FsbCh0aGlzLGFxKTtpZihhPQpwKXt0aGlz
LnJlbmRlcmVyLmFkZHJvdy5jYWxsKHRoaXMsYXAubGFiZWwsYXAuY29sb3IsYWgpO2FoPTNEdHJ1
ZX19YWw9M0RudWw9Cmx9fX1yZXR1cm4gdGhpcy5fZWxlbX07TC5qcXBsb3QuVGFibGVMZWdlbmRS
ZW5kZXJlci5wcm90b3R5cGUucGFjaz0zRGZ1bmN0aT0Kb24oYWope2lmKHRoaXMuc2hvdyl7aWYo
dGhpcy5wbGFjZW1lbnQ9M0Q9M0QiaW5zaWRlR3JpZCIpe3N3aXRjaCh0aGlzLmxvY2F0PQppb24p
e2Nhc2UibnciOnZhciBhaT0zRGFqLmxlZnQ7dmFyIGFoPTNEYWoudG9wO3RoaXMuX2VsZW0uY3Nz
KCJsZWZ0IixhaSk7dGg9CmlzLl9lbGVtLmNzcygidG9wIixhaCk7YnJlYWs7Y2FzZSJuIjp2YXIg
YWk9M0QoYWoubGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbj0Kcy53aWR0aC1hai5yaWdodCkpLzIt
dGhpcy5nZXRXaWR0aCgpLzI7dmFyIGFoPTNEYWoudG9wO3RoaXMuX2VsZW0uY3NzKCJsZWZ0PQoi
LGFpKTt0aGlzLl9lbGVtLmNzcygidG9wIixhaCk7YnJlYWs7Y2FzZSJuZSI6dmFyIGFpPTNEYWou
cmlnaHQ7dmFyIGFoPTNEYWo9Ci50b3A7dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmFpLHRvcDphaH0p
O2JyZWFrO2Nhc2UiZSI6dmFyIGFpPTNEYWoucmlnaHQ7dmFyID0KYWg9M0QoYWoudG9wKyh0aGlz
Ll9wbG90RGltZW5zaW9ucy5oZWlnaHQtYWouYm90dG9tKSkvMi10aGlzLmdldEhlaWdodCgpLzI7
PQp0aGlzLl9lbGVtLmNzcyh7cmlnaHQ6YWksdG9wOmFofSk7YnJlYWs7Y2FzZSJzZSI6dmFyIGFp
PTNEYWoucmlnaHQ7dmFyIGFoPQo9M0Rhai5ib3R0b207dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmFp
LGJvdHRvbTphaH0pO2JyZWFrO2Nhc2UicyI6dmFyIGFpPTNEKGE9CmoubGVmdCsodGhpcy5fcGxv
dERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQpKS8yLXRoaXMuZ2V0V2lkdGgoKS8yO3ZhciBhaD0z
RD0KYWouYm90dG9tO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLGJvdHRvbTphaH0pO2JyZWFrO2Nh
c2Uic3ciOnZhciBhaT0zRGFqLmxlPQpmdDt2YXIgYWg9M0Rhai5ib3R0b207dGhpcy5fZWxlbS5j
c3Moe2xlZnQ6YWksYm90dG9tOmFofSk7YnJlYWs7Y2FzZSJ3Ijp2YXI9CiBhaT0zRGFqLmxlZnQ7
dmFyIGFoPTNEKGFqLnRvcCsodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLmJvdHRvbSkp
LzItdD0KaGlzLmdldEhlaWdodCgpLzI7dGhpcy5fZWxlbS5jc3Moe2xlZnQ6YWksdG9wOmFofSk7
YnJlYWs7ZGVmYXVsdDp2YXIgYWk9M0RhPQpqLnJpZ2h0O3ZhciBhaD0zRGFqLmJvdHRvbTt0aGlz
Ll9lbGVtLmNzcyh7cmlnaHQ6YWksYm90dG9tOmFofSk7YnJlYWt9fWVsc2U9CntpZih0aGlzLnBs
YWNlbWVudD0zRD0zRCJvdXRzaWRlIil7c3dpdGNoKHRoaXMubG9jYXRpb24pe2Nhc2UibnciOnZh
ciBhaT0zRD0KdGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtYWoubGVmdDt2YXIgYWg9M0Rhai50
b3A7dGhpcy5fZWxlbS5jc3MoInJpZ2h0IixhPQppKTt0aGlzLl9lbGVtLmNzcygidG9wIixhaCk7
YnJlYWs7Y2FzZSJuIjp2YXIgYWk9M0QoYWoubGVmdCsodGhpcy5fcGxvdERpbWU9Cm5zaW9ucy53
aWR0aC1hai5yaWdodCkpLzItdGhpcy5nZXRXaWR0aCgpLzI7dmFyIGFoPTNEdGhpcy5fcGxvdERp
bWVuc2lvbnMuaD0KZWlnaHQtYWoudG9wO3RoaXMuX2VsZW0uY3NzKCJsZWZ0IixhaSk7dGhpcy5f
ZWxlbS5jc3MoImJvdHRvbSIsYWgpO2JyZWFrO2NhPQpzZSJuZSI6dmFyIGFpPTNEdGhpcy5fcGxv
dERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQ7dmFyIGFoPTNEYWoudG9wO3RoaXMuX2U9CmxlbS5j
c3Moe2xlZnQ6YWksdG9wOmFofSk7YnJlYWs7Y2FzZSJlIjp2YXIgYWk9M0R0aGlzLl9wbG90RGlt
ZW5zaW9ucy53aWR0aD0KLWFqLnJpZ2h0O3ZhciBhaD0zRChhai50b3ArKHRoaXMuX3Bsb3REaW1l
bnNpb25zLmhlaWdodC1hai5ib3R0b20pKS8yLXRoaXMuPQpnZXRIZWlnaHQoKS8yO3RoaXMuX2Vs
ZW0uY3NzKHtsZWZ0OmFpLHRvcDphaH0pO2JyZWFrO2Nhc2Uic2UiOnZhciBhaT0zRHRoaXM9Ci5f
cGxvdERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQ7dmFyIGFoPTNEYWouYm90dG9tO3RoaXMuX2Vs
ZW0uY3NzKHtsZWZ0OmFpLD0KYm90dG9tOmFofSk7YnJlYWs7Y2FzZSJzIjp2YXIgYWk9M0QoYWou
bGVmdCsodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgtYWouPQpyaWdodCkpLzItdGhpcy5nZXRX
aWR0aCgpLzI7dmFyIGFoPTNEdGhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLmJvdHRvbTs9
CnRoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpLHRvcDphaH0pO2JyZWFrO2Nhc2Uic3ciOnZhciBhaT0z
RHRoaXMuX3Bsb3REaW1lbnNpbz0KbnMud2lkdGgtYWoubGVmdDt2YXIgYWg9M0Rhai5ib3R0b207
dGhpcy5fZWxlbS5jc3Moe3JpZ2h0OmFpLGJvdHRvbTphaH0pO2JyPQplYWs7Y2FzZSJ3Ijp2YXIg
YWk9M0R0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aC1hai5sZWZ0O3ZhciBhaD0zRChhai50b3Ar
KHQ9Cmhpcy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LWFqLmJvdHRvbSkpLzItdGhpcy5nZXRIZWln
aHQoKS8yO3RoaXMuX2VsZW0uY3NzKD0Ke3JpZ2h0OmFpLHRvcDphaH0pO2JyZWFrO2RlZmF1bHQ6
dmFyIGFpPTNEYWoucmlnaHQ7dmFyIGFoPTNEYWouYm90dG9tO3RoaXMuPQpfZWxlbS5jc3Moe3Jp
Z2h0OmFpLGJvdHRvbTphaH0pO2JyZWFrfX1lbHNle3N3aXRjaCh0aGlzLmxvY2F0aW9uKXtjYXNl
Im53Ijo9CnRoaXMuX2VsZW0uY3NzKHtsZWZ0OjAsdG9wOmFqLnRvcH0pO2JyZWFrO2Nhc2UibiI6
dmFyIGFpPTNEKGFqLmxlZnQrKHRoaXMuXz0KcGxvdERpbWVuc2lvbnMud2lkdGgtYWoucmlnaHQp
KS8yLXRoaXMuZ2V0V2lkdGgoKS8yO3RoaXMuX2VsZW0uY3NzKHtsZWZ0OmFpPQosdG9wOmFqLnRv
cH0pO2JyZWFrO2Nhc2UibmUiOnRoaXMuX2VsZW0uY3NzKHtyaWdodDowLHRvcDphai50b3B9KTti
cmVhaztjYXM9CmUiZSI6dmFyIGFoPTNEKGFqLnRvcCsodGhpcy5fcGxvdERpbWVuc2lvbnMuaGVp
Z2h0LWFqLmJvdHRvbSkpLzItdGhpcy5nZXRIZT0KaWdodCgpLzI7dGhpcy5fZWxlbS5jc3Moe3Jp
Z2h0OmFqLnJpZ2h0LHRvcDphaH0pO2JyZWFrO2Nhc2Uic2UiOnRoaXMuX2VsZW0uPQpjc3Moe3Jp
Z2h0OmFqLnJpZ2h0LGJvdHRvbTphai5ib3R0b219KTticmVhaztjYXNlInMiOnZhciBhaT0zRChh
ai5sZWZ0Kyh0aGk9CnMuX3Bsb3REaW1lbnNpb25zLndpZHRoLWFqLnJpZ2h0KSkvMi10aGlzLmdl
dFdpZHRoKCkvMjt0aGlzLl9lbGVtLmNzcyh7bGVmdD0KOmFpLGJvdHRvbTphai5ib3R0b219KTti
cmVhaztjYXNlInN3Ijp0aGlzLl9lbGVtLmNzcyh7bGVmdDphai5sZWZ0LGJvdHRvbTphPQpqLmJv
dHRvbX0pO2JyZWFrO2Nhc2UidyI6dmFyIGFoPTNEKGFqLnRvcCsodGhpcy5fcGxvdERpbWVuc2lv
bnMuaGVpZ2h0LWFqLmI9Cm90dG9tKSkvMi10aGlzLmdldEhlaWdodCgpLzI7dGhpcy5fZWxlbS5j
c3Moe2xlZnQ6YWoubGVmdCx0b3A6YWh9KTticmVhaztkZT0KZmF1bHQ6dGhpcy5fZWxlbS5jc3Mo
e3JpZ2h0OmFqLnJpZ2h0LGJvdHRvbTphai5ib3R0b219KTticmVha319fX19O0wuanFwbG90PQou
VGhlbWVFbmdpbmU9M0RmdW5jdGlvbigpe3RoaXMudGhlbWVzPTNEe307dGhpcy5hY3RpdmVUaGVt
ZT0zRG51bGx9O0wuanFwbG89CnQuVGhlbWVFbmdpbmUucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlv
bigpe3ZhciBhaz0zRG5ldyBMLmpxcGxvdC5UaGVtZSh7X25hbT0KZToiRGVmYXVsdCJ9KTt2YXIg
YW4sYWksYW07Zm9yKGFuIGluIGFrLnRhcmdldCl7aWYoYW49M0Q9M0QidGV4dENvbG9yIil7YWsu
PQp0YXJnZXRbYW5dPTNEdGhpcy50YXJnZXQuY3NzKCJjb2xvciIpfWVsc2V7YWsudGFyZ2V0W2Fu
XT0zRHRoaXMudGFyZ2V0LmNzcyg9CmFuKX19aWYodGhpcy50aXRsZS5zaG93JiZ0aGlzLnRpdGxl
Ll9lbGVtKXtmb3IoYW4gaW4gYWsudGl0bGUpe2lmKGFuPTNEPTNEIj0KdGV4dENvbG9yIil7YWsu
dGl0bGVbYW5dPTNEdGhpcy50aXRsZS5fZWxlbS5jc3MoImNvbG9yIil9ZWxzZXthay50aXRsZVth
bl09Cj0zRHRoaXMudGl0bGUuX2VsZW0uY3NzKGFuKX19fWZvcihhbiBpbiBhay5ncmlkKXthay5n
cmlkW2FuXT0zRHRoaXMuZ3JpZFthbj0KXX1pZihhay5ncmlkLmJhY2tncm91bmRDb2xvcj0zRD0z
RG51bGwmJnRoaXMuZ3JpZC5iYWNrZ3JvdW5kIT0zRG51bGwpe2FrLmdyPQppZC5iYWNrZ3JvdW5k
Q29sb3I9M0R0aGlzLmdyaWQuYmFja2dyb3VuZH1pZih0aGlzLmxlZ2VuZC5zaG93JiZ0aGlzLmxl
Z2VuZC49Cl9lbGVtKXtmb3IoYW4gaW4gYWsubGVnZW5kKXtpZihhbj0zRD0zRCJ0ZXh0Q29sb3Ii
KXthay5sZWdlbmRbYW5dPTNEdGhpcy5sZT0KZ2VuZC5fZWxlbS5jc3MoImNvbG9yIil9ZWxzZXth
ay5sZWdlbmRbYW5dPTNEdGhpcy5sZWdlbmQuX2VsZW0uY3NzKGFuKX19fXZhPQpyIGFqO2Zvcihh
aT0zRDA7YWk8dGhpcy5zZXJpZXMubGVuZ3RoO2FpKyspe2FqPTNEdGhpcy5zZXJpZXNbYWldO2lm
KGFqLnJlbmQ9CmVyZXIuY29uc3RydWN0b3I9M0Q9M0RMLmpxcGxvdC5MaW5lUmVuZGVyZXIpe2Fr
LnNlcmllcy5wdXNoKG5ldyBwKCkpfWVsc2V7aT0KZihhai5yZW5kZXJlci5jb25zdHJ1Y3Rvcj0z
RD0zREwuanFwbG90LkJhclJlbmRlcmVyKXthay5zZXJpZXMucHVzaChuZXcgVCgpPQopfWVsc2V7
aWYoYWoucmVuZGVyZXIuY29uc3RydWN0b3I9M0Q9M0RMLmpxcGxvdC5QaWVSZW5kZXJlcil7YWsu
c2VyaWVzLnB1c2g9CihuZXcgZigpKX1lbHNle2lmKGFqLnJlbmRlcmVyLmNvbnN0cnVjdG9yPTNE
PTNETC5qcXBsb3QuRG9udXRSZW5kZXJlcil7YWsucz0KZXJpZXMucHVzaChuZXcgRygpKX1lbHNl
e2lmKGFqLnJlbmRlcmVyLmNvbnN0cnVjdG9yPTNEPTNETC5qcXBsb3QuRnVubmVsUmVuPQpkZXJl
cil7YWsuc2VyaWVzLnB1c2gobmV3IFooKSl9ZWxzZXtpZihhai5yZW5kZXJlci5jb25zdHJ1Y3Rv
cj0zRD0zREwuanFwbG89CnQuTWV0ZXJHYXVnZVJlbmRlcmVyKXthay5zZXJpZXMucHVzaChuZXcg
RCgpKX1lbHNle2FrLnNlcmllcy5wdXNoKHt9KX19fX19fT0KZm9yKGFuIGluIGFrLnNlcmllc1th
aV0pe2FrLnNlcmllc1thaV1bYW5dPTNEYWpbYW5dfX12YXIgYWgsYWw7Zm9yKGFuIGluIHRoPQpp
cy5heGVzKXthbD0zRHRoaXMuYXhlc1thbl07YWg9M0Rhay5heGVzW2FuXT0zRG5ldyBQKCk7YWgu
Ym9yZGVyQ29sb3I9M0RhbC49CmJvcmRlckNvbG9yO2FoLmJvcmRlcldpZHRoPTNEYWwuYm9yZGVy
V2lkdGg7aWYoYWwuX3RpY2tzJiZhbC5fdGlja3NbMF0pe2Zvcj0KKGFtIGluIGFoLnRpY2tzKXtp
ZihhbC5fdGlja3NbMF0uaGFzT3duUHJvcGVydHkoYW0pKXthaC50aWNrc1thbV09M0RhbC5fdGlj
PQprc1swXVthbV19ZWxzZXtpZihhbC5fdGlja3NbMF0uX2VsZW0pe2FoLnRpY2tzW2FtXT0zRGFs
Ll90aWNrc1swXS5fZWxlbS5jc3M9CihhbSl9fX19aWYoYWwuX2xhYmVsJiZhbC5fbGFiZWwuc2hv
dyl7Zm9yKGFtIGluIGFoLmxhYmVsKXtpZihhbC5fbGFiZWxbYW1dKT0Ke2FoLmxhYmVsW2FtXT0z
RGFsLl9sYWJlbFthbV19ZWxzZXtpZihhbC5fbGFiZWwuX2VsZW0pe2lmKGFtPTNEPTNEInRleHRD
b2xvPQpyIil7YWgubGFiZWxbYW1dPTNEYWwuX2xhYmVsLl9lbGVtLmNzcygiY29sb3IiKX1lbHNl
e2FoLmxhYmVsW2FtXT0zRGFsLl9sYWI9CmVsLl9lbGVtLmNzcyhhbSl9fX19fX10aGlzLnRoZW1l
RW5naW5lLl9hZGQoYWspO3RoaXMudGhlbWVFbmdpbmUuYWN0aXZlVGhlbT0KZT0zRHRoaXMudGhl
bWVFbmdpbmUudGhlbWVzW2FrLl9uYW1lXX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBl
LmdldD0KPTNEZnVuY3Rpb24oYWgpe2lmKCFhaCl7cmV0dXJuIHRoaXMuYWN0aXZlVGhlbWV9ZWxz
ZXtyZXR1cm4gdGhpcy50aGVtZXNbYWhdPQp9fTtmdW5jdGlvbiBPKGFpLGFoKXtyZXR1cm4gYWkt
YWh9TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLmdldFRoZW1lTmE9Cm1lcz0zRGZ1bmN0
aW9uKCl7dmFyIGFoPTNEW107Zm9yKHZhciBhaSBpbiB0aGlzLnRoZW1lcyl7YWgucHVzaChhaSl9
cmV0dXJuID0KYWguc29ydChPKX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLmdldFRo
ZW1lcz0zRGZ1bmN0aW9uKCl7dmFyIGFpPTNEPQpbXTt2YXIgYWg9M0RbXTtmb3IodmFyIGFrIGlu
IHRoaXMudGhlbWVzKXthaS5wdXNoKGFrKX1haS5zb3J0KE8pO2Zvcih2YXIgYWo9Cj0zRDA7YWo8
YWkubGVuZ3RoO2FqKyspe2FoLnB1c2godGhpcy50aGVtZXNbYWlbYWpdXSl9cmV0dXJuIGFofTtM
LmpxcGxvdC5UaD0KZW1lRW5naW5lLnByb3RvdHlwZS5hY3RpdmF0ZT0zRGZ1bmN0aW9uKGF2LGFC
KXt2YXIgYWg9M0RmYWxzZTtpZighYUImJnRoaXMuPQphY3RpdmVUaGVtZSYmdGhpcy5hY3RpdmVU
aGVtZS5fbmFtZSl7YUI9M0R0aGlzLmFjdGl2ZVRoZW1lLl9uYW1lfWlmKCF0aGlzLnQ9CmhlbWVz
Lmhhc093blByb3BlcnR5KGFCKSl7dGhyb3cgbmV3IEVycm9yKCJObyB0aGVtZSBvZiB0aGF0IG5h
bWUiKX1lbHNle3Zhcj0KIGFtPTNEdGhpcy50aGVtZXNbYUJdO3RoaXMuYWN0aXZlVGhlbWU9M0Rh
bTt2YXIgYUEsYXQ9M0RmYWxzZSxhcj0zRGZhbHNlO3ZhPQpyIGFpPTNEWyJ4YXhpcyIsIngyYXhp
cyIsInlheGlzIiwieTJheGlzIl07Zm9yKGF3PTNEMDthdzxhaS5sZW5ndGg7YXcrKyl7dmE9CnIg
YW49M0RhaVthd107aWYoYW0uYXhlc1N0eWxlcy5ib3JkZXJDb2xvciE9M0RudWxsKXthdi5heGVz
W2FuXS5ib3JkZXJDb2xvcj0KPTNEYW0uYXhlc1N0eWxlcy5ib3JkZXJDb2xvcn1pZihhbS5heGVz
U3R5bGVzLmJvcmRlcldpZHRoIT0zRG51bGwpe2F2LmF4ZXNbPQphbl0uYm9yZGVyV2lkdGg9M0Rh
bS5heGVzU3R5bGVzLmJvcmRlcldpZHRofX1mb3IodmFyIGF6IGluIGF2LmF4ZXMpe3ZhciBhaz0K
PTNEYXYuYXhlc1thel07aWYoYWsuc2hvdyl7dmFyIGFxPTNEYW0uYXhlc1thel18fHt9O3ZhciBh
bz0zRGFtLmF4ZXNTdHlsZXM7PQp2YXIgYWw9M0RMLmpxcGxvdC5leHRlbmQodHJ1ZSx7fSxhcSxh
byk7YUE9M0QoYW0uYXhlc1N0eWxlcy5ib3JkZXJDb2xvciE9M0Q9Cm51bGwpP2FtLmF4ZXNTdHls
ZXMuYm9yZGVyQ29sb3I6YWwuYm9yZGVyQ29sb3I7aWYoYWwuYm9yZGVyQ29sb3IhPTNEbnVsbCl7
YT0Kay5ib3JkZXJDb2xvcj0zRGFsLmJvcmRlckNvbG9yO2FoPTNEdHJ1ZX1hQT0zRChhbS5heGVz
U3R5bGVzLmJvcmRlcldpZHRoIT0KPTNEbnVsbCk/YW0uYXhlc1N0eWxlcy5ib3JkZXJXaWR0aDph
bC5ib3JkZXJXaWR0aDtpZihhbC5ib3JkZXJXaWR0aCE9M0RudWxsPQope2FrLmJvcmRlcldpZHRo
PTNEYWwuYm9yZGVyV2lkdGg7YWg9M0R0cnVlfWlmKGFrLl90aWNrcyYmYWsuX3RpY2tzWzBdKXtm
b3I9Cih2YXIgYWogaW4gYWwudGlja3Mpe2FBPTNEYWwudGlja3NbYWpdO2lmKGFBIT0zRG51bGwp
e2FrLnRpY2tPcHRpb25zW2FqXT0zRD0KYUE7YWsuX3RpY2tzPTNEW107YWg9M0R0cnVlfX19aWYo
YWsuX2xhYmVsJiZhay5fbGFiZWwuc2hvdyl7Zm9yKHZhciBhaiBpbiBhPQpsLmxhYmVsKXthQT0z
RGFsLmxhYmVsW2FqXTtpZihhQSE9M0RudWxsKXthay5sYWJlbE9wdGlvbnNbYWpdPTNEYUE7YWg9
M0R0cnU9CmV9fX19fWZvcih2YXIgYXUgaW4gYW0uZ3JpZCl7aWYoYW0uZ3JpZFthdV0hPTNEbnVs
bCl7YXYuZ3JpZFthdV09M0RhbS5ncmlkWz0KYXVdfX1pZighYWgpe2F2LmdyaWQuZHJhdygpfWlm
KGF2LmxlZ2VuZC5zaG93KXtmb3IoYXUgaW4gYW0ubGVnZW5kKXtpZihhbS5sPQplZ2VuZFthdV0h
PTNEbnVsbCl7YXYubGVnZW5kW2F1XT0zRGFtLmxlZ2VuZFthdV19fX1pZihhdi50aXRsZS5zaG93
KXtmb3IoYXU9CiBpbiBhbS50aXRsZSl7aWYoYW0udGl0bGVbYXVdIT0zRG51bGwpe2F2LnRpdGxl
W2F1XT0zRGFtLnRpdGxlW2F1XX19fXZhciBhdz0KO2Zvcihhdz0zRDA7YXc8YW0uc2VyaWVzLmxl
bmd0aDthdysrKXt2YXIgYXA9M0R7fTt2YXIgYXk9M0RmYWxzZTtmb3IoYXUgaW4gPQphbS5zZXJp
ZXNbYXddKXthQT0zRChhbS5zZXJpZXNTdHlsZXNbYXVdIT0zRG51bGwpP2FtLnNlcmllc1N0eWxl
c1thdV06YW0uc2U9CnJpZXNbYXddW2F1XTtpZihhQSE9M0RudWxsKXthcFthdV09M0RhQTtpZihh
dT0zRD0zRCJjb2xvciIpe2F2LnNlcmllc1thd10ucj0KZW5kZXJlci5zaGFwZVJlbmRlcmVyLmZp
bGxTdHlsZT0zRGFBO2F2LnNlcmllc1thd10ucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5zPQp0cm9r
ZVN0eWxlPTNEYUE7YXYuc2VyaWVzW2F3XVthdV09M0RhQX1lbHNle2lmKChhdT0zRD0zRCJsaW5l
V2lkdGgiKXx8KGF1PQo9M0Q9M0QibGluZVBhdHRlcm4iKSl7YXYuc2VyaWVzW2F3XS5yZW5kZXJl
ci5zaGFwZVJlbmRlcmVyW2F1XT0zRGFBO2F2LnNlcmk9CmVzW2F3XVthdV09M0RhQX1lbHNle2lm
KGF1PTNEPTNEIm1hcmtlck9wdGlvbnMiKXtWKGF2LnNlcmllc1thd10ubWFya2VyT3B0aT0Kb25z
LGFBKTtWKGF2LnNlcmllc1thd10ubWFya2VyUmVuZGVyZXIsYUEpfWVsc2V7YXYuc2VyaWVzW2F3
XVthdV09M0RhQX19fWFoPQo9M0R0cnVlfX19aWYoYWgpe2F2LnRhcmdldC5lbXB0eSgpO2F2LmRy
YXcoKX1mb3IoYXUgaW4gYW0udGFyZ2V0KXtpZihhbS50YXI9CmdldFthdV0hPTNEbnVsbCl7YXYu
dGFyZ2V0LmNzcyhhdSxhbS50YXJnZXRbYXVdKX19fX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucD0K
cm90b3R5cGUuX2FkZD0zRGZ1bmN0aW9uKGFpLGFoKXtpZihhaCl7YWkuX25hbWU9M0RhaH1pZigh
YWkuX25hbWUpe2FpLl9uYW1lPQo9M0REYXRlLnBhcnNlKG5ldyBEYXRlKCkpfWlmKCF0aGlzLnRo
ZW1lcy5oYXNPd25Qcm9wZXJ0eShhaS5fbmFtZSkpe3RoaXMudGg9CmVtZXNbYWkuX25hbWVdPTNE
YWl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoImpxcGxvdC5UaGVtZUVuZ2luZSBFcnJvcjogVGhlbWUg
YT0KbHJlYWR5IGluIHVzZSIpfX07TC5qcXBsb3QuVGhlbWVFbmdpbmUucHJvdG90eXBlLnJlbW92
ZT0zRGZ1bmN0aW9uKGFoKXtpZihhPQpoPTNEPTNEIkRlZmF1bHQiKXtyZXR1cm4gZmFsc2V9cmV0
dXJuIGRlbGV0ZSB0aGlzLnRoZW1lc1thaF19O0wuanFwbG90LlRoZW09CmVFbmdpbmUucHJvdG90
eXBlLm5ld1RoZW1lPTNEZnVuY3Rpb24oYWgsYWope2lmKHR5cGVvZihhaCk9M0Q9M0Qib2JqZWN0
Iil7YT0Kaj0zRGFqfHxhaDthaD0zRG51bGx9aWYoYWomJmFqLl9uYW1lKXthaD0zRGFqLl9uYW1l
fWVsc2V7YWg9M0RhaHx8RGF0ZS5wYXJzPQplKG5ldyBEYXRlKCkpfXZhciBhaT0zRHRoaXMuY29w
eSh0aGlzLnRoZW1lcy5EZWZhdWx0Ll9uYW1lLGFoKTtMLmpxcGxvdC5leHQ9CmVuZChhaSxhaik7
cmV0dXJuIGFpfTtmdW5jdGlvbiBCKGFqKXtpZihhaj0zRD0zRG51bGx8fHR5cGVvZihhaikhPTNE
Im9iamVjdD0KIil7cmV0dXJuIGFqfXZhciBhaD0zRG5ldyBhai5jb25zdHJ1Y3RvcigpO2Zvcih2
YXIgYWkgaW4gYWope2FoW2FpXT0zREIoYWpbPQphaV0pfXJldHVybiBhaH1MLmpxcGxvdC5jbG9u
ZT0zREI7ZnVuY3Rpb24gVihhaixhaSl7aWYoYWk9M0Q9M0RudWxsfHx0eXBlb2Y9CihhaSkhPTNE
Im9iamVjdCIpe3JldHVybn1mb3IodmFyIGFoIGluIGFpKXtpZihhaD0zRD0zRCJoaWdobGlnaHRD
b2xvcnMiKXthaj0KW2FoXT0zREIoYWlbYWhdKX1pZihhaVthaF0hPTNEbnVsbCYmdHlwZW9mKGFp
W2FoXSk9M0Q9M0Qib2JqZWN0Iil7aWYoIWFqLmhhPQpzT3duUHJvcGVydHkoYWgpKXthalthaF09
M0R7fX1WKGFqW2FoXSxhaVthaF0pfWVsc2V7YWpbYWhdPTNEYWlbYWhdfX19TC5qcXA9CmxvdC5t
ZXJnZT0zRFY7TC5qcXBsb3QuZXh0ZW5kPTNEZnVuY3Rpb24oKXt2YXIgYW09M0Rhcmd1bWVudHNb
MF18fHt9LGFrPTNEMT0KLGFsPTNEYXJndW1lbnRzLmxlbmd0aCxhaD0zRGZhbHNlLGFqO2lmKHR5
cGVvZiBhbT0zRD0zRD0zRCJib29sZWFuIil7YWg9M0RhPQptO2FtPTNEYXJndW1lbnRzWzFdfHx7
fTthaz0zRDJ9aWYodHlwZW9mIGFtIT0zRD0zRCJvYmplY3QiJiYhdG9TdHJpbmcuY2FsbCg9CmFt
KT0zRD0zRD0zRCJbb2JqZWN0IEZ1bmN0aW9uXSIpe2FtPTNEe319Zm9yKDthazxhbDthaysrKXtp
ZigoYWo9M0Rhcmd1bWVudD0Kc1tha10pIT0zRG51bGwpe2Zvcih2YXIgYWkgaW4gYWope3ZhciBh
bj0zRGFtW2FpXSxhbz0zRGFqW2FpXTtpZihhbT0zRD0zRD0KPTNEYW8pe2NvbnRpbnVlfWlmKGFo
JiZhbyYmdHlwZW9mIGFvPTNEPTNEPTNEIm9iamVjdCImJiFhby5ub2RlVHlwZSl7YW1bYWldPQo9
M0RMLmpxcGxvdC5leHRlbmQoYWgsYW58fChhby5sZW5ndGghPTNEbnVsbD9bXTp7fSksYW8pfWVs
c2V7aWYoYW8hPTNEPTNEdSk9CnthbVthaV09M0Rhb319fX19cmV0dXJuIGFtfTtMLmpxcGxvdC5U
aGVtZUVuZ2luZS5wcm90b3R5cGUucmVuYW1lPTNEZnVuY3Rpbz0KbihhaSxhaCl7aWYoYWk9M0Q9
M0QiRGVmYXVsdCJ8fGFoPTNEPTNEIkRlZmF1bHQiKXt0aHJvdyBuZXcgRXJyb3IoImpxcGxvdC5U
PQpoZW1lRW5naW5lIEVycm9yOiBDYW5ub3QgcmVuYW1lIGZyb20vdG8gRGVmYXVsdCIpfWlmKHRo
aXMudGhlbWVzLmhhc093blByb3A9CmVydHkoYWgpKXt0aHJvdyBuZXcgRXJyb3IoImpxcGxvdC5U
aGVtZUVuZ2luZSBFcnJvcjogTmV3IG5hbWUgYWxyZWFkeSBpbiB1cz0KZS4iKX1lbHNle2lmKHRo
aXMudGhlbWVzLmhhc093blByb3BlcnR5KGFpKSl7dmFyIGFqPTNEdGhpcy5jb3B5KGFpLGFoKTt0
aGlzPQoucmVtb3ZlKGFpKTtyZXR1cm4gYWp9fXRocm93IG5ldyBFcnJvcigianFwbG90LlRoZW1l
RW5naW5lIEVycm9yOiBPbGQgbmFtZSA9Cm9yIG5ldyBuYW1lIGludmFsaWQiKX07TC5qcXBsb3Qu
VGhlbWVFbmdpbmUucHJvdG90eXBlLmNvcHk9M0RmdW5jdGlvbihhaCxhaj0KLGFsKXtpZihhaj0z
RD0zRCJEZWZhdWx0Iil7dGhyb3cgbmV3IEVycm9yKCJqcXBsb3QuVGhlbWVFbmdpbmUgRXJyb3I6
IENhbm5vPQp0IGNvcHkgb3ZlciBEZWZhdWx0IHRoZW1lIil9aWYoIXRoaXMudGhlbWVzLmhhc093
blByb3BlcnR5KGFoKSl7dmFyIGFpPTNEImo9CnFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBTb3Vy
Y2UgbmFtZSBpbnZhbGlkIjt0aHJvdyBuZXcgRXJyb3IoYWkpfWlmKHRoaXMudD0KaGVtZXMuaGFz
T3duUHJvcGVydHkoYWopKXt2YXIgYWk9M0QianFwbG90LlRoZW1lRW5naW5lIEVycm9yOiBUYXJn
ZXQgbmFtZSBpPQpudmFsaWQiO3Rocm93IG5ldyBFcnJvcihhaSl9ZWxzZXt2YXIgYWs9M0RCKHRo
aXMudGhlbWVzW2FoXSk7YWsuX25hbWU9M0Rhajs9CkwuanFwbG90LmV4dGVuZCh0cnVlLGFrLGFs
KTt0aGlzLl9hZGQoYWspO3JldHVybiBha319O0wuanFwbG90LlRoZW1lPTNEZnVuYz0KdGlvbihh
aCxhaSl7aWYodHlwZW9mKGFoKT0zRD0zRCJvYmplY3QiKXthaT0zRGFpfHxhaDthaD0zRG51bGx9
YWg9M0RhaHx8RGF0PQplLnBhcnNlKG5ldyBEYXRlKCkpO3RoaXMuX25hbWU9M0RhaDt0aGlzLnRh
cmdldD0zRHtiYWNrZ3JvdW5kQ29sb3I6bnVsbH07dGg9CmlzLmxlZ2VuZD0zRHt0ZXh0Q29sb3I6
bnVsbCxmb250RmFtaWx5Om51bGwsZm9udFNpemU6bnVsbCxib3JkZXI6bnVsbCxiYWNrZz0Kcm91
bmQ6bnVsbH07dGhpcy50aXRsZT0zRHt0ZXh0Q29sb3I6bnVsbCxmb250RmFtaWx5Om51bGwsZm9u
dFNpemU6bnVsbCx0ZXh0PQpBbGlnbjpudWxsfTt0aGlzLnNlcmllc1N0eWxlcz0zRHt9O3RoaXMu
c2VyaWVzPTNEW107dGhpcy5ncmlkPTNEe2RyYXdHcmlkbGk9Cm5lczpudWxsLGdyaWRMaW5lQ29s
b3I6bnVsbCxncmlkTGluZVdpZHRoOm51bGwsYmFja2dyb3VuZENvbG9yOm51bGwsYm9yZGVyQz0K
b2xvcjpudWxsLGJvcmRlcldpZHRoOm51bGwsc2hhZG93Om51bGx9O3RoaXMuYXhlc1N0eWxlcz0z
RHtsYWJlbDp7fSx0aWNrczp7PQp9fTt0aGlzLmF4ZXM9M0R7fTtpZih0eXBlb2YoYWkpPTNEPTNE
InN0cmluZyIpe3RoaXMuX25hbWU9M0RhaX1lbHNle2lmKHR5cGU9Cm9mKGFpKT0zRD0zRCJvYmpl
Y3QiKXtMLmpxcGxvdC5leHRlbmQodHJ1ZSx0aGlzLGFpKX19fTt2YXIgUD0zRGZ1bmN0aW9uKCl7
dD0KaGlzLmJvcmRlckNvbG9yPTNEbnVsbDt0aGlzLmJvcmRlcldpZHRoPTNEbnVsbDt0aGlzLnRp
Y2tzPTNEbmV3IG8oKTt0aGlzLmxhPQpiZWw9M0RuZXcgdCgpfTt2YXIgbz0zRGZ1bmN0aW9uKCl7
dGhpcy5zaG93PTNEbnVsbDt0aGlzLnNob3dHcmlkbGluZT0zRG51bGw9Cjt0aGlzLnNob3dMYWJl
bD0zRG51bGw7dGhpcy5zaG93TWFyaz0zRG51bGw7dGhpcy5zaXplPTNEbnVsbDt0aGlzLnRleHRD
b2xvcj0KPTNEbnVsbDt0aGlzLndoaXRlU3BhY2U9M0RudWxsO3RoaXMuZm9udFNpemU9M0RudWxs
O3RoaXMuZm9udEZhbWlseT0zRG51bGx9PQo7dmFyIHQ9M0RmdW5jdGlvbigpe3RoaXMudGV4dENv
bG9yPTNEbnVsbDt0aGlzLndoaXRlU3BhY2U9M0RudWxsO3RoaXMuZm9udFM9Cml6ZT0zRG51bGw7
dGhpcy5mb250RmFtaWx5PTNEbnVsbDt0aGlzLmZvbnRXZWlnaHQ9M0RudWxsfTt2YXIgcD0zRGZ1
bmN0aW9uKD0KKXt0aGlzLmNvbG9yPTNEbnVsbDt0aGlzLmxpbmVXaWR0aD0zRG51bGw7dGhpcy5s
aW5lUGF0dGVybj0zRG51bGw7dGhpcy5zaGFkPQpvdz0zRG51bGw7dGhpcy5maWxsQ29sb3I9M0Ru
dWxsO3RoaXMuc2hvd01hcmtlcj0zRG51bGw7dGhpcy5tYXJrZXJPcHRpb25zPQo9M0RuZXcgSSgp
fTt2YXIgST0zRGZ1bmN0aW9uKCl7dGhpcy5zaG93PTNEbnVsbDt0aGlzLnN0eWxlPTNEbnVsbDt0
aGlzLmxpbmU9CldpZHRoPTNEbnVsbDt0aGlzLnNpemU9M0RudWxsO3RoaXMuY29sb3I9M0RudWxs
O3RoaXMuc2hhZG93PTNEbnVsbH07dmFyIFQ9Cj0zRGZ1bmN0aW9uKCl7dGhpcy5jb2xvcj0zRG51
bGw7dGhpcy5zZXJpZXNDb2xvcnM9M0RudWxsO3RoaXMubGluZVdpZHRoPTNEbj0KdWxsO3RoaXMu
c2hhZG93PTNEbnVsbDt0aGlzLmJhclBhZGRpbmc9M0RudWxsO3RoaXMuYmFyTWFyZ2luPTNEbnVs
bDt0aGlzLmJhPQpyV2lkdGg9M0RudWxsO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPTNEbnVsbH07dmFy
IGY9M0RmdW5jdGlvbigpe3RoaXMuc2VyaWVzQ289CmxvcnM9M0RudWxsO3RoaXMucGFkZGluZz0z
RG51bGw7dGhpcy5zbGljZU1hcmdpbj0zRG51bGw7dGhpcy5maWxsPTNEbnVsbDt0aD0KaXMuc2hh
ZG93PTNEbnVsbDt0aGlzLnN0YXJ0QW5nbGU9M0RudWxsO3RoaXMubGluZVdpZHRoPTNEbnVsbDt0
aGlzLmhpZ2hsaWdoPQp0Q29sb3JzPTNEbnVsbH07dmFyIEc9M0RmdW5jdGlvbigpe3RoaXMuc2Vy
aWVzQ29sb3JzPTNEbnVsbDt0aGlzLnBhZGRpbmc9M0Q9Cm51bGw7dGhpcy5zbGljZU1hcmdpbj0z
RG51bGw7dGhpcy5maWxsPTNEbnVsbDt0aGlzLnNoYWRvdz0zRG51bGw7dGhpcy5zdGFydD0KQW5n
bGU9M0RudWxsO3RoaXMubGluZVdpZHRoPTNEbnVsbDt0aGlzLmlubmVyRGlhbWV0ZXI9M0RudWxs
O3RoaXMudGhpY2tuZXNzPQo9M0RudWxsO3RoaXMucmluZ01hcmdpbj0zRG51bGw7dGhpcy5oaWdo
bGlnaHRDb2xvcnM9M0RudWxsfTt2YXIgWj0zRGZ1bmN0aW89Cm4oKXt0aGlzLmNvbG9yPTNEbnVs
bDt0aGlzLmxpbmVXaWR0aD0zRG51bGw7dGhpcy5zaGFkb3c9M0RudWxsO3RoaXMucGFkZGluZz0K
PTNEbnVsbDt0aGlzLnNlY3Rpb25NYXJnaW49M0RudWxsO3RoaXMuc2VyaWVzQ29sb3JzPTNEbnVs
bDt0aGlzLmhpZ2hsaWdodENvPQpsb3JzPTNEbnVsbH07dmFyIEQ9M0RmdW5jdGlvbigpe3RoaXMu
cGFkZGluZz0zRG51bGw7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9M0Q9Cm51bGw7dGhpcy5yaW5nQ29s
b3I9M0RudWxsO3RoaXMudGlja0NvbG9yPTNEbnVsbDt0aGlzLnJpbmdXaWR0aD0zRG51bGw7dGhp
cz0KLmludGVydmFsQ29sb3JzPTNEbnVsbDt0aGlzLmludGVydmFsSW5uZXJSYWRpdXM9M0RudWxs
O3RoaXMuaW50ZXJ2YWxPdXRlclJhPQpkaXVzPTNEbnVsbDt0aGlzLmh1YlJhZGl1cz0zRG51bGw7
dGhpcy5uZWVkbGVUaGlja25lc3M9M0RudWxsO3RoaXMubmVlZGxlUGE9CmQ9M0RudWxsfTtMLmZu
LmpxcGxvdENoaWxkVGV4dD0zRGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcykuY29udGVudHMoKS5m
aWx0ZT0KcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVUeXBlPTNEPTNEM30pLnRleHQoKX07
TC5mbi5qcXBsb3RHZXRDb21wdXRlZEZvPQpudFN0eWxlPTNEZnVuY3Rpb24oKXt2YXIgYWs9M0R3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT93aW5kb3cuZ2V0Q29tcHV0ZWRTdHk9CmxlKHRoaXNbMF0s
IiIpOnRoaXNbMF0uY3VycmVudFN0eWxlO3ZhciBhaT0zRGFrWyJmb250LXN0eWxlIl0/WyJmb250
LXN0eWxlIj0KLCJmb250LXdlaWdodCIsImZvbnQtc2l6ZSIsImZvbnQtZmFtaWx5Il06WyJmb250
U3R5bGUiLCJmb250V2VpZ2h0IiwiZm9udFNpPQp6ZSIsImZvbnRGYW1pbHkiXTt2YXIgYWw9M0Rb
XTtmb3IodmFyIGFqPTNEMDthajxhaS5sZW5ndGg7Kythail7dmFyIGFoPTNEU3Q9CnJpbmcoYWtb
YWlbYWpdXSk7aWYoYWgmJmFoIT0zRCJub3JtYWwiKXthbC5wdXNoKGFoKX19cmV0dXJuIGFsLmpv
aW4oIiAiKX07TD0KLmZuLmpxcGxvdFRvSW1hZ2VDYW52YXM9M0RmdW5jdGlvbihhail7YWo9M0Rh
anx8e307dmFyIGF2PTNEKGFqLnhfb2Zmc2V0PTNEPQo9M0RudWxsKT8wOmFqLnhfb2Zmc2V0O3Zh
ciBheD0zRChhai55X29mZnNldD0zRD0zRG51bGwpPzA6YWoueV9vZmZzZXQ7dmFyIGE9Cmw9M0Qo
YWouYmFja2dyb3VuZENvbG9yPTNEPTNEbnVsbCk/InJnYigyNTUsMjU1LDI1NSkiOmFqLmJhY2tn
cm91bmRDb2xvcjtpZj0KKEwodGhpcykud2lkdGgoKT0zRD0zRDB8fEwodGhpcykuaGVpZ2h0KCk9
M0Q9M0QwKXtyZXR1cm4gbnVsbH1pZihMLmpxcGxvdC51PQpzZV9leGNhbnZhcyl7cmV0dXJuIG51
bGx9dmFyIGFuPTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dmFyIGFBPQo9M0RM
KHRoaXMpLm91dGVySGVpZ2h0KHRydWUpO3ZhciBhdD0zREwodGhpcykub3V0ZXJXaWR0aCh0cnVl
KTt2YXIgYW09M0RMKHQ9Cmhpcykub2Zmc2V0KCk7dmFyIGFvPTNEYW0ubGVmdDt2YXIgYXE9M0Rh
bS50b3A7dmFyIGF1PTNEMCxhcj0zRDA7dmFyIGF5PTNEWz0KImpxcGxvdC10YWJsZS1sZWdlbmQi
LCJqcXBsb3QteGF4aXMtdGljayIsImpxcGxvdC14MmF4aXMtdGljayIsImpxcGxvdC15YXhpPQpz
LXRpY2siLCJqcXBsb3QteTJheGlzLXRpY2siLCJqcXBsb3QteTNheGlzLXRpY2siLCJqcXBsb3Qt
eTRheGlzLXRpY2siLCJqcXA9CmxvdC15NWF4aXMtdGljayIsImpxcGxvdC15NmF4aXMtdGljayIs
ImpxcGxvdC15N2F4aXMtdGljayIsImpxcGxvdC15OGF4aXMtdD0KaWNrIiwianFwbG90LXk5YXhp
cy10aWNrIiwianFwbG90LXhheGlzLWxhYmVsIiwianFwbG90LXgyYXhpcy1sYWJlbCIsImpxcGxv
PQp0LXlheGlzLWxhYmVsIiwianFwbG90LXkyYXhpcy1sYWJlbCIsImpxcGxvdC15M2F4aXMtbGFi
ZWwiLCJqcXBsb3QteTRheGlzLWw9CmFiZWwiLCJqcXBsb3QteTVheGlzLWxhYmVsIiwianFwbG90
LXk2YXhpcy1sYWJlbCIsImpxcGxvdC15N2F4aXMtbGFiZWwiLCJqcT0KcGxvdC15OGF4aXMtbGFi
ZWwiLCJqcXBsb3QteTlheGlzLWxhYmVsIl07dmFyIGFwLGFoLGFpLGFCO2Zvcih2YXIgYXo9M0Qw
O2F6PQo8YXkubGVuZ3RoO2F6Kyspe0wodGhpcykuZmluZCgiLiIrYXlbYXpdKS5lYWNoKGZ1bmN0
aW9uKCl7YXA9M0RMKHRoaXMpLm9mZnM9CmV0KCkudG9wLWFxO2FoPTNETCh0aGlzKS5vZmZzZXQo
KS5sZWZ0LWFvO2FCPTNEYWgrTCh0aGlzKS5vdXRlcldpZHRoKHRydWUpKz0KYXU7YWk9M0RhcCtM
KHRoaXMpLm91dGVySGVpZ2h0KHRydWUpK2FyO2lmKGFoPC1hdSl7YXQ9M0RhdC1hdS1haDthdT0z
RC1haH1pPQpmKGFwPC1hcil7YUE9M0RhQS1hci1hcDthcj0zRC1hcH1pZihhQj5hdCl7YXQ9M0Rh
Qn1pZihhaT5hQSl7YUE9M0RhaX19KX1hbi49CndpZHRoPTNEYXQrTnVtYmVyKGF2KTthbi5oZWln
aHQ9M0RhQStOdW1iZXIoYXgpO3ZhciBhaz0zRGFuLmdldENvbnRleHQoIjJkIj0KKTthay5zYXZl
KCk7YWsuZmlsbFN0eWxlPTNEYWw7YWsuZmlsbFJlY3QoMCwwLGFuLndpZHRoLGFuLmhlaWdodCk7
YWsucmVzdG9yPQplKCk7YWsudHJhbnNsYXRlKGF1LGFyKTthay50ZXh0QWxpZ249M0QibGVmdCI7
YWsudGV4dEJhc2VsaW5lPTNEInRvcCI7ZnVuY3Q9CmlvbiBhQyhhRSl7dmFyIGFGPTNEcGFyc2VJ
bnQoTChhRSkuY3NzKCJsaW5lLWhlaWdodCIpLDEwKTtpZihpc05hTihhRikpe2FGPQo9M0RwYXJz
ZUludChMKGFFKS5jc3MoImZvbnQtc2l6ZSIpLDEwKSoxLjJ9cmV0dXJuIGFGfWZ1bmN0aW9uIGFE
KGFGLGFFLGFTLGE9CkcsYU8sYUgpe3ZhciBhUT0zRGFDKGFGKTt2YXIgYUs9M0RMKGFGKS5pbm5l
cldpZHRoKCk7dmFyIGFMPTNETChhRikuaW5uZXJIZT0KaWdodCgpO3ZhciBhTj0zRGFTLnNwbGl0
KC9ccysvKTt2YXIgYVI9M0RhTi5sZW5ndGg7dmFyIGFQPTNEIiI7dmFyIGFNPTNEW107PQp2YXIg
YVU9M0RhTzt2YXIgYVQ9M0RhRztmb3IodmFyIGFKPTNEMDthSjxhUjthSisrKXthUCs9M0RhTlth
Sl07aWYoYUUubWVhc3U9CnJlVGV4dChhUCkud2lkdGg+YUspe2FNLnB1c2goYUopO2FQPTNEIiI7
YUotLX19aWYoYU0ubGVuZ3RoPTNEPTNEPTNEMCl7aWYoTD0KKGFGKS5jc3MoInRleHRBbGlnbiIp
PTNEPTNEPTNEImNlbnRlciIpe2FUPTNEYUcrKGFILWFFLm1lYXN1cmVUZXh0KGFQKS53aWR0PQpo
KS8yLWF1fWFFLmZpbGxUZXh0KGFTLGFULGFPKX1lbHNle2FQPTNEYU4uc2xpY2UoMCxhTVswXSku
am9pbigiICIpO2lmKEwoYUY9CikuY3NzKCJ0ZXh0QWxpZ24iKT0zRD0zRD0zRCJjZW50ZXIiKXth
VD0zRGFHKyhhSC1hRS5tZWFzdXJlVGV4dChhUCkud2lkdGgpLz0KMi1hdX1hRS5maWxsVGV4dChh
UCxhVCxhVSk7YVUrPTNEYVE7Zm9yKHZhciBhSj0zRDEsYUk9M0RhTS5sZW5ndGg7YUo8YUk7YUor
PQorKXthUD0zRGFOLnNsaWNlKGFNW2FKLTFdLGFNW2FKXSkuam9pbigiICIpO2lmKEwoYUYpLmNz
cygidGV4dEFsaWduIik9M0Q9M0Q9Cj0zRCJjZW50ZXIiKXthVD0zRGFHKyhhSC1hRS5tZWFzdXJl
VGV4dChhUCkud2lkdGgpLzItYXV9YUUuZmlsbFRleHQoYVAsYVQsYT0KVSk7YVUrPTNEYVF9YVA9
M0RhTi5zbGljZShhTVthSi0xXSxhTi5sZW5ndGgpLmpvaW4oIiAiKTtpZihMKGFGKS5jc3MoInRl
eHRBPQpsaWduIik9M0Q9M0Q9M0QiY2VudGVyIil7YVQ9M0RhRysoYUgtYUUubWVhc3VyZVRleHQo
YVApLndpZHRoKS8yLWF1fWFFLmZpbGw9ClRleHQoYVAsYVQsYVUpfX1mdW5jdGlvbiBhdyhhRyxh
SixhRSl7dmFyIGFOPTNEYUcudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3Zhcj0KIGFGPTNETChhRyku
cG9zaXRpb24oKTt2YXIgYUs9M0R3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT93aW5kb3cuZ2V0Q29t
cHV0ZWRTPQp0eWxlKGFHLCIiKTphRy5jdXJyZW50U3R5bGU7dmFyIGFJPTNEYUorYUYubGVmdCtw
YXJzZUludChhSy5tYXJnaW5MZWZ0LDEwKSs9CnBhcnNlSW50KGFLLmJvcmRlckxlZnRXaWR0aCwx
MCkrcGFyc2VJbnQoYUsucGFkZGluZ0xlZnQsMTApO3ZhciBhTD0zRGFFK2FGLj0KdG9wK3BhcnNl
SW50KGFLLm1hcmdpblRvcCwxMCkrcGFyc2VJbnQoYUsuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNl
SW50KGFLLnBhPQpkZGluZ1RvcCwxMCk7dmFyIGFNPTNEYW4ud2lkdGg7aWYoKGFOPTNEPTNEImRp
diJ8fGFOPTNEPTNEInNwYW4iKSYmIUwoYUcpLmg9CmFzQ2xhc3MoImpxcGxvdC1oaWdobGlnaHRl
ci10b29sdGlwIikpe0woYUcpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe2F3KD0KdGhpcyxh
SSxhTCl9KTt2YXIgYU89M0RMKGFHKS5qcXBsb3RDaGlsZFRleHQoKTtpZihhTyl7YWsuZm9udD0z
REwoYUcpLmpxcGxvPQp0R2V0Q29tcHV0ZWRGb250U3R5bGUoKTthay5maWxsU3R5bGU9M0RMKGFH
KS5jc3MoImNvbG9yIik7YUQoYUcsYWssYU8sYUksYUw9CixhTSl9fWVsc2V7aWYoYU49M0Q9M0Q9
M0QidGFibGUiJiZMKGFHKS5oYXNDbGFzcygianFwbG90LXRhYmxlLWxlZ2VuZCIpKXthaz0KLnN0
cm9rZVN0eWxlPTNETChhRykuY3NzKCJib3JkZXItdG9wLWNvbG9yIik7YWsuZmlsbFN0eWxlPTNE
TChhRykuY3NzKCJiYWNrPQpncm91bmQtY29sb3IiKTthay5maWxsUmVjdChhSSxhTCxMKGFHKS5p
bm5lcldpZHRoKCksTChhRykuaW5uZXJIZWlnaHQoKSk7aWY9CihwYXJzZUludChMKGFHKS5jc3Mo
ImJvcmRlci10b3Atd2lkdGgiKSwxMCk+MCl7YWsuc3Ryb2tlUmVjdChhSSxhTCxMKGFHKS5pbj0K
bmVyV2lkdGgoKSxMKGFHKS5pbm5lckhlaWdodCgpKX1MKGFHKS5maW5kKCJkaXYuanFwbG90LXRh
YmxlLWxlZ2VuZC1zd2F0Y2gtPQpvdXRsaW5lIikuZWFjaChmdW5jdGlvbigpe3ZhciBhVT0zREwo
dGhpcyk7YWsuc3Ryb2tlU3R5bGU9M0RhVS5jc3MoImJvcmRlci09CnRvcC1jb2xvciIpO3ZhciBh
UT0zRGFJK2FVLnBvc2l0aW9uKCkubGVmdDt2YXIgYVI9M0RhTCthVS5wb3NpdGlvbigpLnRvcDth
az0KLnN0cm9rZVJlY3QoYVEsYVIsYVUuaW5uZXJXaWR0aCgpLGFVLmlubmVySGVpZ2h0KCkpO2FR
Kz0zRHBhcnNlSW50KGFVLmNzcygiPQpwYWRkaW5nLWxlZnQiKSwxMCk7YVIrPTNEcGFyc2VJbnQo
YVUuY3NzKCJwYWRkaW5nLXRvcCIpLDEwKTt2YXIgYVQ9M0RhVS5pbm49CmVySGVpZ2h0KCktMipw
YXJzZUludChhVS5jc3MoInBhZGRpbmctdG9wIiksMTApO3ZhciBhUD0zRGFVLmlubmVyV2lkdGgo
KS0yKj0KcGFyc2VJbnQoYVUuY3NzKCJwYWRkaW5nLWxlZnQiKSwxMCk7dmFyIGFTPTNEYVUuY2hp
bGRyZW4oImRpdi5qcXBsb3QtdGFibGUtPQpsZWdlbmQtc3dhdGNoIik7YWsuZmlsbFN0eWxlPTNE
YVMuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIik7YWsuZmlsbFJlY3QoYVEsYVI9CixhUCxhVCl9KTtM
KGFHKS5maW5kKCJ0ZC5qcXBsb3QtdGFibGUtbGVnZW5kLWxhYmVsIikuZWFjaChmdW5jdGlvbigp
e3ZhciBhUj0KPTNETCh0aGlzKTt2YXIgYVA9M0RhSSthUi5wb3NpdGlvbigpLmxlZnQ7dmFyIGFR
PTNEYUwrYVIucG9zaXRpb24oKS50b3ArcGFyPQpzZUludChhUi5jc3MoInBhZGRpbmctdG9wIiks
MTApO2FrLmZvbnQ9M0RhUi5qcXBsb3RHZXRDb21wdXRlZEZvbnRTdHlsZSgpO2E9CmsuZmlsbFN0
eWxlPTNEYVIuY3NzKCJjb2xvciIpO2FEKGFSLGFrLGFSLnRleHQoKSxhUCxhUSxhTSl9KTt2YXIg
YUg9M0RudWxsfT0KZWxzZXtpZihhTj0zRD0zRCJjYW52YXMiKXthay5kcmF3SW1hZ2UoYUcsYUks
YUwpfX19fUwodGhpcykuY2hpbGRyZW4oKS5lYWNoPQooZnVuY3Rpb24oKXthdyh0aGlzLGF2LGF4
KX0pO3JldHVybiBhbn07TC5mbi5qcXBsb3RUb0ltYWdlU3RyPTNEZnVuY3Rpb24oYWk9Cil7dmFy
IGFoPTNETCh0aGlzKS5qcXBsb3RUb0ltYWdlQ2FudmFzKGFpKTtpZihhaCl7cmV0dXJuIGFoLnRv
RGF0YVVSTCgiaW1hZz0KZS9wbmciKX1lbHNle3JldHVybiBudWxsfX07TC5mbi5qcXBsb3RUb0lt
YWdlRWxlbT0zRGZ1bmN0aW9uKGFoKXt2YXIgYWk9M0RkPQpvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImltZyIpO3ZhciBhaj0zREwodGhpcykuanFwbG90VG9JbWFnZVN0cihhaCk7YWkuc3JjPQo9M0Rh
ajtyZXR1cm4gYWl9O0wuZm4uanFwbG90VG9JbWFnZUVsZW1TdHI9M0RmdW5jdGlvbihhaCl7dmFy
IGFpPTNEIjxpbWcgc3I9CmM9M0QiK0wodGhpcykuanFwbG90VG9JbWFnZVN0cihhaCkrIiAvPiI7
cmV0dXJuIGFpfTtMLmZuLmpxcGxvdFNhdmVJbWFnZT0zRD0KZnVuY3Rpb24oKXt2YXIgYWg9M0RM
KHRoaXMpLmpxcGxvdFRvSW1hZ2VTdHIoe30pO2lmKGFoKXt3aW5kb3cubG9jYXRpb24uaHJlPQpm
PTNEYWgucmVwbGFjZSgiaW1hZ2UvcG5nIiwiaW1hZ2Uvb2N0ZXQtc3RyZWFtIil9fTtMLmZuLmpx
cGxvdFZpZXdJbWFnZT0zRGY9CnVuY3Rpb24oKXt2YXIgYWk9M0RMKHRoaXMpLmpxcGxvdFRvSW1h
Z2VFbGVtU3RyKHt9KTt2YXIgYWo9M0RMKHRoaXMpLmpxcGxvdD0KVG9JbWFnZVN0cih7fSk7aWYo
YWkpe3ZhciBhaD0zRHdpbmRvdy5vcGVuKCIiKTthaC5kb2N1bWVudC5vcGVuKCJpbWFnZS9wbmci
PQopO2FoLmRvY3VtZW50LndyaXRlKGFpKTthaC5kb2N1bWVudC5jbG9zZSgpO2FoPTNEbnVsbH19
O3ZhciBhZz0zRGZ1bmN0aW9uKCk9Cnt0aGlzLnN5bnRheD0zRGFnLmNvbmZpZy5zeW50YXg7dGhp
cy5fdHlwZT0zRCJqc0RhdGUiO3RoaXMucHJveHk9M0RuZXcgRGF0ZT0KKCk7dGhpcy5vcHRpb25z
PTNEe307dGhpcy5sb2NhbGU9M0RhZy5yZWdpb25hbC5nZXRMb2NhbGUoKTt0aGlzLmZvcm1hdFN0
cmluPQpnPTNEIiI7dGhpcy5kZWZhdWx0Q2VudHVyeT0zRGFnLmNvbmZpZy5kZWZhdWx0Q2VudHVy
eTtzd2l0Y2goYXJndW1lbnRzLmxlbmc9CnRoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmlmKGwoYXJn
dW1lbnRzWzBdKT0zRD0zRCJbb2JqZWN0IE9iamVjdF0iJiZhcmd1bWVudD0Kc1swXS5fdHlwZSE9
M0QianNEYXRlIil7dmFyIGFqPTNEdGhpcy5vcHRpb25zPTNEYXJndW1lbnRzWzBdO3RoaXMuc3lu
dGF4PTNEPQphai5zeW50YXh8fHRoaXMuc3ludGF4O3RoaXMuZGVmYXVsdENlbnR1cnk9M0Rhai5k
ZWZhdWx0Q2VudHVyeXx8dGhpcy5kZWZhdWw9CnRDZW50dXJ5O3RoaXMucHJveHk9M0RhZy5jcmVh
dGVEYXRlKGFqLmRhdGUpfWVsc2V7dGhpcy5wcm94eT0zRGFnLmNyZWF0ZURhdD0KZShhcmd1bWVu
dHNbMF0pfWJyZWFrO2RlZmF1bHQ6dmFyIGFoPTNEW107Zm9yKHZhciBhaT0zRDA7YWk8YXJndW1l
bnRzLmxlbmd0PQpoO2FpKyspe2FoLnB1c2goYXJndW1lbnRzW2FpXSl9dGhpcy5wcm94eT0zRG5l
dyBEYXRlKCk7dGhpcy5wcm94eS5zZXRGdWxsWWU9CmFyLmFwcGx5KHRoaXMucHJveHksYWguc2xp
Y2UoMCwzKSk7aWYoYWguc2xpY2UoMykubGVuZ3RoKXt0aGlzLnByb3h5LnNldEhvdT0KcnMuYXBw
bHkodGhpcy5wcm94eSxhaC5zbGljZSgzKSl9YnJlYWt9fTthZy5jb25maWc9M0R7ZGVmYXVsdExv
Y2FsZToiZW4iLHN5PQpudGF4OiJwZXJsIixkZWZhdWx0Q2VudHVyeToxOTAwfTthZy5wcm90b3R5
cGUuYWRkPTNEZnVuY3Rpb24oYWosYWkpe3ZhciBhaD0KPTNERVthaV18fEUuZGF5O2lmKHR5cGVv
ZiBhaD0zRD0zRCJudW1iZXIiKXt0aGlzLnByb3h5LnNldFRpbWUodGhpcy5wcm94eS5nPQpldFRp
bWUoKSsoYWgqYWopKX1lbHNle2FoLmFkZCh0aGlzLGFqKX1yZXR1cm4gdGhpc307YWcucHJvdG90
eXBlLmNsb25lPTNEZnU9Cm5jdGlvbigpe3JldHVybiBuZXcgYWcodGhpcy5wcm94eS5nZXRUaW1l
KCkpfTthZy5wcm90b3R5cGUuZ2V0VXRjT2Zmc2V0PTNEZj0KdW5jdGlvbigpe3JldHVybiB0aGlz
LnByb3h5LmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDB9O2FnLnByb3RvdHlwZS5kaWZmPTNEPQpm
dW5jdGlvbihhaSxhbCxhaCl7YWk9M0RuZXcgYWcoYWkpO2lmKGFpPTNEPTNEPTNEbnVsbCl7cmV0
dXJuIG51bGx9dmFyIGFqPQo9M0RFW2FsXXx8RS5kYXk7aWYodHlwZW9mIGFqPTNEPTNEIm51bWJl
ciIpe3ZhciBhaz0zRCh0aGlzLnByb3h5LmdldFRpbWUoKS09CmFpLnByb3h5LmdldFRpbWUoKSkv
YWp9ZWxzZXt2YXIgYWs9M0Rhai5kaWZmKHRoaXMucHJveHksYWkucHJveHkpfXJldHVybihhaD0K
P2FrOk1hdGhbYWs+MD8iZmxvb3IiOiJjZWlsIl0oYWspKX07YWcucHJvdG90eXBlLmdldEFiYnJE
YXlOYW1lPTNEZnVuY3Rpb24oPQope3JldHVybiBhZy5yZWdpb25hbFt0aGlzLmxvY2FsZV1bImRh
eU5hbWVzU2hvcnQiXVt0aGlzLnByb3h5LmdldERheSgpXX07YWc9Ci5wcm90b3R5cGUuZ2V0QWJi
ck1vbnRoTmFtZT0zRGZ1bmN0aW9uKCl7cmV0dXJuIGFnLnJlZ2lvbmFsW3RoaXMubG9jYWxlXVsi
bT0Kb250aE5hbWVzU2hvcnQiXVt0aGlzLnByb3h5LmdldE1vbnRoKCldfTthZy5wcm90b3R5cGUu
Z2V0QU1QTT0zRGZ1bmN0aW9uKCl7PQpyZXR1cm4gdGhpcy5wcm94eS5nZXRIb3VycygpPj0zRDEy
PyJQTSI6IkFNIn07YWcucHJvdG90eXBlLmdldEFtUG09M0RmdW5jdGk9Cm9uKCl7cmV0dXJuIHRo
aXMucHJveHkuZ2V0SG91cnMoKT49M0QxMj8icG0iOiJhbSJ9O2FnLnByb3RvdHlwZS5nZXRDZW50
dXJ5PQo9M0RmdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLnByb3h5LmdldEZ1bGxZZWFy
KCkvMTAwLDEwKX07YWcucHJvdG90eXA9CmUuZ2V0RGF0ZT0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMucHJveHkuZ2V0RGF0ZSgpfTthZy5wcm90b3R5cGUuZ2V0RGF5PTNEZj0KdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnByb3h5LmdldERheSgpfTthZy5wcm90b3R5cGUuZ2V0RGF5T2ZXZWVrPTNEZnVu
Y3Rpb24oPQope3ZhciBhaD0zRHRoaXMucHJveHkuZ2V0RGF5KCk7cmV0dXJuIGFoPTNEPTNEPTNE
MD83OmFofTthZy5wcm90b3R5cGUuZ2V0RGE9CnlPZlllYXI9M0RmdW5jdGlvbigpe3ZhciBhaT0z
RHRoaXMucHJveHk7dmFyIGFoPTNEYWktbmV3IERhdGUoIiIrYWkuZ2V0RnVsbD0KWWVhcigpKyIv
MS8xIEdNVCIpO2FoKz0zRGFpLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDA7YWk9M0RudWxsO3Jl
dHVybiBwYXJzPQplSW50KGFoLzYwMDAwLzYwLzI0LDEwKSsxfTthZy5wcm90b3R5cGUuZ2V0RGF5
TmFtZT0zRGZ1bmN0aW9uKCl7cmV0dXJuIGFnLnI9CmVnaW9uYWxbdGhpcy5sb2NhbGVdWyJkYXlO
YW1lcyJdW3RoaXMucHJveHkuZ2V0RGF5KCldfTthZy5wcm90b3R5cGUuZ2V0RnVsbD0KV2Vla09m
WWVhcj0zRGZ1bmN0aW9uKCl7dmFyIGFrPTNEdGhpcy5wcm94eTt2YXIgYWg9M0R0aGlzLmdldERh
eU9mWWVhcigpO3ZhPQpyIGFqPTNENi1hay5nZXREYXkoKTt2YXIgYWk9M0RwYXJzZUludCgoYWgr
YWopLzcsMTApO3JldHVybiBhaX07YWcucHJvdG90eXA9CmUuZ2V0RnVsbFllYXI9M0RmdW5jdGlv
bigpe3JldHVybiB0aGlzLnByb3h5LmdldEZ1bGxZZWFyKCl9O2FnLnByb3RvdHlwZS5nZT0KdEdt
dE9mZnNldD0zRGZ1bmN0aW9uKCl7dmFyIGFoPTNEdGhpcy5wcm94eS5nZXRUaW1lem9uZU9mZnNl
dCgpLzYwO3ZhciBhaT0KPTNEYWg8MD8iKyI6Ii0iO2FoPTNETWF0aC5hYnMoYWgpO3JldHVybiBh
aStOKE1hdGguZmxvb3IoYWgpLDIpKyI6IitOKChhaCUxPQopKjYwLDIpfTthZy5wcm90b3R5cGUu
Z2V0SG91cnM9M0RmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldEhvdXJzKCl9O2E9Cmcu
cHJvdG90eXBlLmdldEhvdXJzMTI9M0RmdW5jdGlvbigpe3ZhciBhaD0zRHRoaXMucHJveHkuZ2V0
SG91cnMoKTtyZXR1cm4gYT0KaD4xMj9haC0xMjooYWg9M0Q9M0QwPzEyOmFoKX07YWcucHJvdG90
eXBlLmdldElzb1dlZWs9M0RmdW5jdGlvbigpe3ZhciBhaz0KPTNEdGhpcy5wcm94eTt2YXIgYWo9
M0R0aGlzLmdldFdlZWtPZlllYXIoKTt2YXIgYWg9M0QobmV3IERhdGUoIiIrYWsuZ2V0RnVsPQps
WWVhcigpKyIvMS8xIikpLmdldERheSgpO3ZhciBhaT0zRGFqKyhhaD40fHxhaDw9M0QxPzA6MSk7
aWYoYWk9M0Q9M0Q1MyYmKG49CmV3IERhdGUoIiIrYWsuZ2V0RnVsbFllYXIoKSsiLzEyLzMxIikp
LmdldERheSgpPDQpe2FpPTNEMX1lbHNle2lmKGFpPTNEPTNEPQo9M0QwKXthaz0zRG5ldyBhZyhu
ZXcgRGF0ZSgiIisoYWsuZ2V0RnVsbFllYXIoKS0xKSsiLzEyLzMxIikpO2FpPTNEYWsuZ2V0SXM9
Cm9XZWVrKCl9fWFrPTNEbnVsbDtyZXR1cm4gYWl9O2FnLnByb3RvdHlwZS5nZXRNaWxsaXNlY29u
ZHM9M0RmdW5jdGlvbigpe3JldD0KdXJuIHRoaXMucHJveHkuZ2V0TWlsbGlzZWNvbmRzKCl9O2Fn
LnByb3RvdHlwZS5nZXRNaW51dGVzPTNEZnVuY3Rpb24oKXtyZXR1PQpybiB0aGlzLnByb3h5Lmdl
dE1pbnV0ZXMoKX07YWcucHJvdG90eXBlLmdldE1vbnRoPTNEZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy49CnByb3h5LmdldE1vbnRoKCl9O2FnLnByb3RvdHlwZS5nZXRNb250aE5hbWU9M0RmdW5jdGlv
bigpe3JldHVybiBhZy5yZWdpb25hbD0KW3RoaXMubG9jYWxlXVsibW9udGhOYW1lcyJdW3RoaXMu
cHJveHkuZ2V0TW9udGgoKV19O2FnLnByb3RvdHlwZS5nZXRNb250aE51PQptYmVyPTNEZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRNb250aCgpKzF9O2FnLnByb3RvdHlwZS5nZXRTZWNv
bmRzPQo9M0RmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5LmdldFNlY29uZHMoKX07YWcucHJv
dG90eXBlLmdldFNob3J0WWVhcj0zRGY9CnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eS5nZXRZ
ZWFyKCklMTAwfTthZy5wcm90b3R5cGUuZ2V0VGltZT0zRGZ1bmN0aW9uKD0KKXtyZXR1cm4gdGhp
cy5wcm94eS5nZXRUaW1lKCl9O2FnLnByb3RvdHlwZS5nZXRUaW1lem9uZUFiYnI9M0RmdW5jdGlv
bigpe3JlPQp0dXJuIHRoaXMucHJveHkudG9TdHJpbmcoKS5yZXBsYWNlKC9eLipcKChbXildKylc
KSQvLCIkMSIpfTthZy5wcm90b3R5cGUuZ2U9CnRUaW1lem9uZU5hbWU9M0RmdW5jdGlvbigpe3Zh
ciBhaD0zRC8oPzpcKCguKylcKSR8IChbQS1aXXszfSkgKS8uZXhlYyh0aGlzLj0KdG9TdHJpbmco
KSk7cmV0dXJuIGFoWzFdfHxhaFsyXXx8IkdNVCIrdGhpcy5nZXRHbXRPZmZzZXQoKX07YWcucHJv
dG90eXBlLmdlPQp0VGltZXpvbmVPZmZzZXQ9M0RmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3h5
LmdldFRpbWV6b25lT2Zmc2V0KCl9O2FnLnByb3Q9Cm90eXBlLmdldFdlZWtPZlllYXI9M0RmdW5j
dGlvbigpe3ZhciBhaD0zRHRoaXMuZ2V0RGF5T2ZZZWFyKCk7dmFyIGFqPTNENy10aD0KaXMuZ2V0
RGF5T2ZXZWVrKCk7dmFyIGFpPTNEcGFyc2VJbnQoKGFoK2FqKS83LDEwKTtyZXR1cm4gYWl9O2Fn
LnByb3RvdHlwZS5nPQpldFVuaXg9M0RmdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKHRoaXMu
cHJveHkuZ2V0VGltZSgpLzEwMDAsMCl9O2FnLnByb3Q9Cm90eXBlLmdldFllYXI9M0RmdW5jdGlv
bigpe3JldHVybiB0aGlzLnByb3h5LmdldFllYXIoKX07YWcucHJvdG90eXBlLm5leHQ9Cj0zRGZ1
bmN0aW9uKGFoKXthaD0zRGFofHwiZGF5IjtyZXR1cm4gdGhpcy5jbG9uZSgpLmFkZCgxLGFoKX07
YWcucHJvdG90eXBlLj0Kc2V0PTNEZnVuY3Rpb24oKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7
Y2FzZSAwOnRoaXMucHJveHk9M0RuZXcgRGF0ZSgpO2JyPQplYWs7Y2FzZSAxOmlmKGwoYXJndW1l
bnRzWzBdKT0zRD0zRCJbb2JqZWN0IE9iamVjdF0iJiZhcmd1bWVudHNbMF0uX3R5cGUhPQo9M0Qi
anNEYXRlIil7dmFyIGFqPTNEdGhpcy5vcHRpb25zPTNEYXJndW1lbnRzWzBdO3RoaXMuc3ludGF4
PTNEYWouc3ludGF4fHw9CnRoaXMuc3ludGF4O3RoaXMuZGVmYXVsdENlbnR1cnk9M0Rhai5kZWZh
dWx0Q2VudHVyeXx8dGhpcy5kZWZhdWx0Q2VudHVyeTt0aD0KaXMucHJveHk9M0RhZy5jcmVhdGVE
YXRlKGFqLmRhdGUpfWVsc2V7dGhpcy5wcm94eT0zRGFnLmNyZWF0ZURhdGUoYXJndW1lbnRzPQpb
MF0pfWJyZWFrO2RlZmF1bHQ6dmFyIGFoPTNEW107Zm9yKHZhciBhaT0zRDA7YWk8YXJndW1lbnRz
Lmxlbmd0aDthaSsrKXthaC49CnB1c2goYXJndW1lbnRzW2FpXSl9dGhpcy5wcm94eT0zRG5ldyBE
YXRlKCk7dGhpcy5wcm94eS5zZXRGdWxsWWVhci5hcHBseSh0aD0KaXMucHJveHksYWguc2xpY2Uo
MCwzKSk7aWYoYWguc2xpY2UoMykubGVuZ3RoKXt0aGlzLnByb3h5LnNldEhvdXJzLmFwcGx5KHRo
PQppcy5wcm94eSxhaC5zbGljZSgzKSl9YnJlYWt9cmV0dXJuIHRoaXN9O2FnLnByb3RvdHlwZS5z
ZXREYXRlPTNEZnVuY3Rpb24oYWg9Cil7dGhpcy5wcm94eS5zZXREYXRlKGFoKTtyZXR1cm4gdGhp
c307YWcucHJvdG90eXBlLnNldEZ1bGxZZWFyPTNEZnVuY3Rpb24oKT0Ke3RoaXMucHJveHkuc2V0
RnVsbFllYXIuYXBwbHkodGhpcy5wcm94eSxhcmd1bWVudHMpO3JldHVybiB0aGlzfTthZy5wcm90
b3R5PQpwZS5zZXRIb3Vycz0zRGZ1bmN0aW9uKCl7dGhpcy5wcm94eS5zZXRIb3Vycy5hcHBseSh0
aGlzLnByb3h5LGFyZ3VtZW50cyk7cmU9CnR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldE1pbGxp
c2Vjb25kcz0zRGZ1bmN0aW9uKGFoKXt0aGlzLnByb3h5LnNldE1pbGxpcz0KZWNvbmRzKGFoKTty
ZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnNldE1pbnV0ZXM9M0RmdW5jdGlvbigpe3RoaXMucHJv
eHkuc2V0PQpNaW51dGVzLmFwcGx5KHRoaXMucHJveHksYXJndW1lbnRzKTtyZXR1cm4gdGhpc307
YWcucHJvdG90eXBlLnNldE1vbnRoPTNEZnU9Cm5jdGlvbigpe3RoaXMucHJveHkuc2V0TW9udGgu
YXBwbHkodGhpcy5wcm94eSxhcmd1bWVudHMpO3JldHVybiB0aGlzfTthZy5wcj0Kb3RvdHlwZS5z
ZXRTZWNvbmRzPTNEZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNldFNlY29uZHMuYXBwbHkodGhpcy5w
cm94eSxhcmd1PQptZW50cyk7cmV0dXJuIHRoaXN9O2FnLnByb3RvdHlwZS5zZXRUaW1lPTNEZnVu
Y3Rpb24oYWgpe3RoaXMucHJveHkuc2V0VGltZSg9CmFoKTtyZXR1cm4gdGhpc307YWcucHJvdG90
eXBlLnNldFllYXI9M0RmdW5jdGlvbigpe3RoaXMucHJveHkuc2V0WWVhci5hcHBseT0KKHRoaXMu
cHJveHksYXJndW1lbnRzKTtyZXR1cm4gdGhpc307YWcucHJvdG90eXBlLnN0cmZ0aW1lPTNEZnVu
Y3Rpb24oYWgpe2FoPQo9M0RhaHx8dGhpcy5mb3JtYXRTdHJpbmd8fGFnLnJlZ2lvbmFsW3RoaXMu
bG9jYWxlXVsiZm9ybWF0U3RyaW5nIl07cmV0dXJuIGE9Cmcuc3RyZnRpbWUodGhpcyxhaCx0aGlz
LnN5bnRheCl9O2FnLnByb3RvdHlwZS50b1N0cmluZz0zRGZ1bmN0aW9uKCl7cmV0dXJuID0KdGhp
cy5wcm94eS50b1N0cmluZygpfTthZy5wcm90b3R5cGUudG9ZbWRJbnQ9M0RmdW5jdGlvbigpe3Jl
dHVybih0aGlzLnByb3h5PQouZ2V0RnVsbFllYXIoKSoxMDAwMCkrKHRoaXMuZ2V0TW9udGhOdW1i
ZXIoKSoxMDApK3RoaXMucHJveHkuZ2V0RGF0ZSgpfTthZy49CnJlZ2lvbmFsPTNEe2VuOnttb250
aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bj0K
ZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNl
bWJlciJdLG1vbnRoTmFtZXNTPQpob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5Iiwi
SnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGU9CmMiXSxkYXlOYW1lczpbIlN1
bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIs
Ij0KU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1
IiwiRnJpIiwiU2F0Il0sZm9ybWF0PQpTdHJpbmc6IiVZLSVtLSVkICVIOiVNOiVTIn0sZnI6e21v
bnRoTmFtZXM6WyJKYW52aWVyIiwiRj1DMz1BOXZyaWVyIiwiTWFycyI9CiwiQXZyaWwiLCJNYWki
LCJKdWluIiwiSnVpbGxldCIsIkFvPUMzPUJCdCIsIlNlcHRlbWJyZSIsIk9jdG9icmUiLCJOb3Zl
bWJyZT0KIiwiRD1DMz1BOWNlbWJyZSJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkY9QzM9QTl2
IiwiTWFyIiwiQXZyIiwiTWFpIiwiSnVuPQoiLCJKdWwiLCJBbz1DMz1CQiIsIlNlcCIsIk9jdCIs
Ik5vdiIsIkQ9QzM9QTljIl0sZGF5TmFtZXM6WyJEaW1hbmNoZSIsIkx1bmQ9CmkiLCJNYXJkaSIs
Ik1lcmNyZWRpIiwiSmV1ZGkiLCJWZW5kcmVkaSIsIlNhbWVkaSJdLGRheU5hbWVzU2hvcnQ6WyJE
aW0iLCJMdT0KbiIsIk1hciIsIk1lciIsIkpldSIsIlZlbiIsIlNhbSJdLGZvcm1hdFN0cmluZzoi
JVktJW0tJWQgJUg6JU06JVMifSxkZTp7bW9uPQp0aE5hbWVzOlsiSmFudWFyIiwiRmVicnVhciIs
Ik09QzM9QTRyeiIsIkFwcmlsIiwiTWFpIiwiSnVuaSIsIkp1bGkiLCJBdWd1c3Q9CiIsIlNlcHRl
bWJlciIsIk9rdG9iZXIiLCJOb3ZlbWJlciIsIkRlemVtYmVyIl0sbW9udGhOYW1lc1Nob3J0Olsi
SmFuIiwiRmViIj0KLCJNPUMzPUE0ciIsIkFwciIsIk1haSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNl
cCIsIk9rdCIsIk5vdiIsIkRleiJdLGRheU5hbWVzPQo6WyJTb25udGFnIiwiTW9udGFnIiwiRGll
bnN0YWciLCJNaXR0d29jaCIsIkRvbm5lcnN0YWciLCJGcmVpdGFnIiwiU2Ftc3RhZyI9Cl0sZGF5
TmFtZXNTaG9ydDpbIlNvIiwiTW8iLCJEaSIsIk1pIiwiRG8iLCJGciIsIlNhIl0sZm9ybWF0U3Ry
aW5nOiIlWS0lbS0lZD0KICVIOiVNOiVTIn0sZXM6e21vbnRoTmFtZXM6WyJFbmVybyIsIkZlYnJl
cm8iLCJNYXJ6byIsIkFicmlsIiwiTWF5byIsIkp1bmlvPQoiLCJKdWxpbyIsIkFnb3N0byIsIlNl
cHRpZW1icmUiLCJPY3R1YnJlIiwiTm92aWVtYnJlIiwiRGljaWVtYnJlIl0sbW9udGhOYW09CmVz
U2hvcnQ6WyJFbmUiLCJGZWIiLCJNYXIiLCJBYnIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBZ28iLCJT
ZXAiLCJPY3QiLCJOb3YiLD0KIkRpYyJdLGRheU5hbWVzOlsiRG9taW5nbyIsIkx1bmVzIiwiTWFy
dGVzIiwiTWkmZWFjdXRlO3Jjb2xlcyIsIkp1ZXZlcyIsIlZpPQplcm5lcyIsIlMmYWFjdXRlO2Jh
ZG8iXSxkYXlOYW1lc1Nob3J0OlsiRG9tIiwiTHVuIiwiTWFyIiwiTWkmZWFjdXRlOyIsIkp1diI9
CiwiVmllIiwiUyZhYWN1dGU7YiJdLGZvcm1hdFN0cmluZzoiJVktJW0tJWQgJUg6JU06JVMifSxy
dTp7bW9udGhOYW1lczpbIj1EMD0KPUFGPUQwPUJEPUQwPUIyPUQwPUIwPUQxPTgwPUQxPThDIiwi
PUQwPUE0PUQwPUI1PUQwPUIyPUQxPTgwPUQwPUIwPUQwPUJCPUQxPQo9OEMiLCI9RDA9OUM9RDA9
QjA9RDE9ODA9RDE9ODIiLCI9RDA9OTA9RDA9QkY9RDE9ODA9RDA9QjU9RDA9QkI9RDE9OEMiLCI9
RDA9Cj05Qz1EMD1CMD1EMD1COSIsIj1EMD05OD1EMT04RT1EMD1CRD1EMT04QyIsIj1EMD05OD1E
MT04RT1EMD1CQj1EMT04QyIsIj1EMD0KPTkwPUQwPUIyPUQwPUIzPUQxPTgzPUQxPTgxPUQxPTgy
IiwiPUQwPUExPUQwPUI1PUQwPUJEPUQxPTgyPUQxPThGPUQwPUIxPUQxPQo9ODA9RDE9OEMiLCI9
RDA9OUU9RDA9QkE9RDE9ODI9RDE9OEY9RDA9QjE9RDE9ODA9RDE9OEMiLCI9RDA9OUQ9RDA9QkU9
RDE9OEY9Cj1EMD1CMT1EMT04MD1EMT04QyIsIj1EMD05ND1EMD1CNT1EMD1CQT1EMD1CMD1EMD1C
MT1EMT04MD1EMT04QyJdLG1vbnRoTmFtZT0Kc1Nob3J0OlsiPUQwPUFGPUQwPUJEPUQwPUIyIiwi
PUQwPUE0PUQwPUI1PUQwPUIyIiwiPUQwPTlDPUQwPUIwPUQxPTgwIiwiPUQwPQo9OTA9RDA9QkY9
RDE9ODAiLCI9RDA9OUM9RDA9QjA9RDA9QjkiLCI9RDA9OTg9RDE9OEU9RDA9QkQiLCI9RDA9OTg9
RDE9OEU9RDA9Cj1CQiIsIj1EMD05MD1EMD1CMj1EMD1CMyIsIj1EMD1BMT1EMD1CNT1EMD1CRCIs
Ij1EMD05RT1EMD1CQT1EMT04MiIsIj1EMD05RD0KPUQwPUJFPUQxPThGIiwiPUQwPTk0PUQwPUI1
PUQwPUJBIl0sZGF5TmFtZXM6WyI9RDA9QjI9RDA9QkU9RDE9ODE9RDA9QkE9RDE9Cj04MD1EMD1C
NT1EMT04MT1EMD1CNT1EMD1CRD1EMT04Qz1EMD1CNSIsIj1EMD1CRj1EMD1CRT1EMD1CRD1EMD1C
NT1EMD1CND1EMD0KPUI1PUQwPUJCPUQxPThDPUQwPUJEPUQwPUI4PUQwPUJBIiwiPUQwPUIyPUQx
PTgyPUQwPUJFPUQxPTgwPUQwPUJEPUQwPUI4PUQwPQo9QkEiLCI9RDE9ODE9RDE9ODA9RDA9QjU9
RDA9QjQ9RDA9QjAiLCI9RDE9ODc9RDA9QjU9RDE9ODI9RDA9QjI9RDA9QjU9RDE9ODA9Cj1EMD1C
MyIsIj1EMD1CRj1EMT04Rj1EMT04Mj1EMD1CRD1EMD1COD1EMT04Nj1EMD1CMCIsIj1EMT04MT1E
MT04Mz1EMD1CMT1EMD0KPUIxPUQwPUJFPUQxPTgyPUQwPUIwIl0sZGF5TmFtZXNTaG9ydDpbIj1E
MD1CMj1EMT04MT1EMD1CQSIsIj1EMD1CRj1EMD1CRD0KPUQwPUI0IiwiPUQwPUIyPUQxPTgyPUQx
PTgwIiwiPUQxPTgxPUQxPTgwPUQwPUI0IiwiPUQxPTg3PUQxPTgyPUQwPUIyIiwiPUQwPQo9QkY9
RDE9ODI9RDA9QkQiLCI9RDE9ODE9RDA9QjE9RDE9ODIiXSxmb3JtYXRTdHJpbmc6IiVZLSVtLSVk
ICVIOiVNOiVTIn0sYXI9Cjp7bW9udGhOYW1lczpbIj1EOT04Mz1EOD1BNz1EOT04Nj1EOT04OD1E
OT04NiA9RDg9QTc9RDk9ODQ9RDg9QUI9RDg9QTc9RDk9Cj04Nj1EOT04QSIsIj1EOD1CND1EOD1B
OD1EOD1BNz1EOD1CNyIsIj1EOD1BMj1EOD1CMD1EOD1BNz1EOD1CMSIsIj1EOT04Nj1EOT0KPThB
PUQ4PUIzPUQ4PUE3PUQ5PTg2IiwiPUQ4PUEyPUQ4PUIwPUQ4PUE3PUQ4PUIxIiwiPUQ4PUFEPUQ4
PUIyPUQ5PThBPUQ4PUIxPQo9RDg9QTc9RDk9ODYiLCI9RDg9QUE9RDk9ODU9RDk9ODg9RDg9QjIi
LCI9RDg9QTI9RDg9QTgiLCI9RDg9QTM9RDk9OEE9RDk9ODQ9Cj1EOT04OD1EOT04NCIsIj1EOD1B
QT1EOD1CND1EOD1CMT1EOT04QT1EOT04NiA9RDg9QTc9RDk9ODQ9RDg9QTM9RDk9ODg9RDk9Cj04
NCIsIj1EOD1BQT1EOD1CND1EOD1CMT1EOT04QT1EOT04NiA9RDg9QTc9RDk9ODQ9RDg9QUI9RDg9
QTc9RDk9ODY9RDk9OEEiLD0KIj1EOT04Mz1EOD1BNz1EOT04Nj1EOT04OD1EOT04NiA9RDg9QTc9
RDk9ODQ9RDg9QTM9RDk9ODg9RDk9ODQiXSxtb250aE5hbWVzPQpTaG9ydDpbIjEiLCIyIiwiMyIs
IjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLGRheU5hbWVzOlsiPUQ4PQo9
QTc9RDk9ODQ9RDg9QjM9RDg9QTg9RDg9QUEiLCI9RDg9QTc9RDk9ODQ9RDg9QTM9RDg9QUQ9RDg9
QUYiLCI9RDg9QTc9RDk9ODQ9Cj1EOD1BNz1EOD1BQj1EOT04Nj1EOT04QT1EOT04NiIsIj1EOD1B
Nz1EOT04ND1EOD1BQj1EOT04ND1EOD1BNz1EOD1BQj1EOD1BNz0KPUQ4PUExIiwiPUQ4PUE3PUQ5
PTg0PUQ4PUEzPUQ4PUIxPUQ4PUE4PUQ4PUI5PUQ4PUE3PUQ4PUExIiwiPUQ4PUE3PUQ5PTg0PUQ4
PQo9QUU9RDk9ODU9RDk9OEE9RDg9QjMiLCI9RDg9QTc9RDk9ODQ9RDg9QUM9RDk9ODU9RDg9Qjk9
RDg9QTkiXSxkYXlOYW1lc1Nob3I9CnQ6WyI9RDg9QjM9RDg9QTg9RDg9QUEiLCI9RDg9QTM9RDg9
QUQ9RDg9QUYiLCI9RDg9QTc9RDg9QUI9RDk9ODY9RDk9OEE9RDk9Cj04NiIsIj1EOD1BQj1EOT04
ND1EOD1BNz1EOD1BQj1EOD1BNz1EOD1BMSIsIj1EOD1BMz1EOD1CMT1EOD1BOD1EOD1COT1EOD1B
Nz0KPUQ4PUExIiwiPUQ4PUFFPUQ5PTg1PUQ5PThBPUQ4PUIzIiwiPUQ4PUFDPUQ5PTg1PUQ4PUI5
PUQ4PUE5Il0sZm9ybWF0U3RyaW5nPQo6IiVZLSVtLSVkICVIOiVNOiVTIn0scHQ6e21vbnRoTmFt
ZXM6WyJKYW5laXJvIiwiRmV2ZXJlaXJvIiwiTWFyJmNjZWRpbDtvIiw9CiJBYnJpbCIsIk1haW8i
LCJKdW5obyIsIkp1bGhvIiwiQWdvc3RvIiwiU2V0ZW1icm8iLCJPdXR1YnJvIiwiTm92ZW1icm8i
LCJEZT0KemVtYnJvIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmV2IiwiTWFyIiwiQWJyIiwi
TWFpIiwiSnVuIiwiSnVsIiwiQWdvIiwiPQpTZXQiLCJPdXQiLCJOb3YiLCJEZXoiXSxkYXlOYW1l
czpbIkRvbWluZ28iLCJTZWd1bmRhLWZlaXJhIiwiVGVyJmNjZWRpbDthLWY9CmVpcmEiLCJRdWFy
dGEtZmVpcmEiLCJRdWludGEtZmVpcmEiLCJTZXh0YS1mZWlyYSIsIlMmYWFjdXRlO2JhZG8iXSxk
YXlOYW1lcz0KU2hvcnQ6WyJEb20iLCJTZWciLCJUZXIiLCJRdWEiLCJRdWkiLCJTZXgiLCJTJmFh
Y3V0ZTtiIl0sZm9ybWF0U3RyaW5nOiIlWS0lPQptLSVkICVIOiVNOiVTIn0sInB0LUJSIjp7bW9u
dGhOYW1lczpbIkphbmVpcm8iLCJGZXZlcmVpcm8iLCJNYXImY2NlZGlsO28iLCI9CkFicmlsIiwi
TWFpbyIsIkp1bmhvIiwiSnVsaG8iLCJBZ29zdG8iLCJTZXRlbWJybyIsIk91dHVicm8iLCJOb3Zl
bWJybyIsIkRlej0KZW1icm8iXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZXYiLCJNYXIiLCJB
YnIiLCJNYWkiLCJKdW4iLCJKdWwiLCJBZ28iLCJTPQpldCIsIk91dCIsIk5vdiIsIkRleiJdLGRh
eU5hbWVzOlsiRG9taW5nbyIsIlNlZ3VuZGEtZmVpcmEiLCJUZXImY2NlZGlsO2EtZmU9CmlyYSIs
IlF1YXJ0YS1mZWlyYSIsIlF1aW50YS1mZWlyYSIsIlNleHRhLWZlaXJhIiwiUyZhYWN1dGU7YmFk
byJdLGRheU5hbWVzUz0KaG9ydDpbIkRvbSIsIlNlZyIsIlRlciIsIlF1YSIsIlF1aSIsIlNleCIs
IlMmYWFjdXRlO2IiXSxmb3JtYXRTdHJpbmc6IiVZLSVtPQotJWQgJUg6JU06JVMifSxwbDp7bW9u
dGhOYW1lczpbIlN0eWN6ZT1DNT04NCIsIkx1dHkiLCJNYXJ6ZWMiLCJLd2llY2llPUM1PQo9ODQi
LCJNYWoiLCJDemVyd2llYyIsIkxpcGllYyIsIlNpZXJwaWU9QzU9ODQiLCJXcnplc2llPUM1PTg0
IiwiUGE9QzU9QkFkemk9CmVybmlrIiwiTGlzdG9wYWQiLCJHcnVkemllPUM1PTg0Il0sbW9udGhO
YW1lc1Nob3J0OlsiU3R5IiwiTHV0IiwiTWFyIiwiS3dpIj0KLCJNYWoiLCJDemUiLCJMaXAiLCJT
aWUiLCJXcnoiLCJQYT1DNT1CQSIsIkxpcyIsIkdydSJdLGRheU5hbWVzOlsiTmllZHppZWxhPQoi
LCJQb25pZWR6aWE9QzU9ODJlayIsIld0b3JlayIsIj1DNT05QXJvZGEiLCJDendhcnRlayIsIlBp
PUM0PTg1dGVrIiwiU29ib3Q9CmEiXSxkYXlOYW1lc1Nob3J0OlsiTmkiLCJQbiIsIld0IiwiPUM1
PTlBciIsIkN6IiwiUHQiLCJTYiJdLGZvcm1hdFN0cmluZzoiJT0KWS0lbS0lZCAlSDolTTolUyJ9
LG5sOnttb250aE5hbWVzOlsiSmFudWFyaSIsIkZlYnJ1YXJpIiwiTWFhcnQiLCJBcHJpbCIsIk1l
PQppIiwiSnVuaSIsIkp1bHkiLCJBdWd1c3R1cyIsIlNlcHRlbWJlciIsIk9rdG9iZXIiLCJOb3Zl
bWJlciIsIkRlY2VtYmVyIl0sbW89Cm50aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJB
cHIiLCJNZWkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPa3QiLD0KIk5vdiIsIkRlYyJdLGRh
eU5hbWVzOiIsIlsiWm9uZGFnIiwiTWFhbmRhZyIsIkRpbnNkYWciLCJXb2Vuc2RhZyIsIkRvbmRl
cmRhPQpnIiwiVnJpamRhZyIsIlphdGVyZGFnIl0sZGF5TmFtZXNTaG9ydDpbIlpvIiwiTWEiLCJE
aSIsIldvIiwiRG8iLCJWciIsIlphIl09Cixmb3JtYXRTdHJpbmc6IiVZLSVtLSVkICVIOiVNOiVT
In0sc3Y6e21vbnRoTmFtZXM6WyJqYW51YXJpIiwiZmVicnVhcmkiLCJtYT0KcnMiLCJhcHJpbCIs
Im1haiIsImp1bmkiLCJqdWxpIiwiYXVndXN0aSIsInNlcHRlbWJlciIsIm9rdG9iZXIiLCJub3Zl
bWJlciIsPQoiZGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJqYW4iLCJmZWIiLCJtYXIiLCJh
cHIiLCJtYWoiLCJqdW4iLCJqdWwiLCJhdWc9CiIsInNlcCIsIm9rdCIsIm5vdiIsImRlYyJdLGRh
eU5hbWVzOlsicz1DMz1CNm5kYWciLCJtPUMzPUE1bmRhZyIsInRpc2RhZyIsIj0Kb25zZGFnIiwi
dG9yc2RhZyIsImZyZWRhZyIsImw9QzM9QjZyZGFnIl0sZGF5TmFtZXNTaG9ydDpbInM9QzM9QjZu
IiwibT1DMz0KPUE1biIsInRpcyIsIm9ucyIsInRvciIsImZyZSIsImw9QzM9QjZyIl0sZm9ybWF0
U3RyaW5nOiIlWS0lbS0lZCAlSDolTTolUyJ9PQp9O2FnLnJlZ2lvbmFsWyJlbi1VUyJdPTNEYWcu
cmVnaW9uYWxbImVuLUdCIl09M0RhZy5yZWdpb25hbC5lbjthZy5yZWdpb25hbC49CmdldExvY2Fs
ZT0zRGZ1bmN0aW9uKCl7dmFyIGFoPTNEYWcuY29uZmlnLmRlZmF1bHRMb2NhbGU7aWYoZG9jdW1l
bnQmJmRvY3VtZT0KbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKSYmZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXS5sPQphbmcpe2FoPTNEZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImh0bWwiKVswXS5sYW5nO2lmKCFhZy5yZWdpb25hbC5oYXM9Ck93blBy
b3BlcnR5KGFoKSl7YWg9M0RhZy5jb25maWcuZGVmYXVsdExvY2FsZX19cmV0dXJuIGFofTt2YXIg
Qz0zRDI0KjYwKjYwKj0KMTAwMDt2YXIgTj0zRGZ1bmN0aW9uKGFoLGFrKXthaD0zRFN0cmluZyhh
aCk7dmFyIGFpPTNEYWstYWgubGVuZ3RoO3ZhciBhaj0KPTNEU3RyaW5nKE1hdGgucG93KDEwLGFp
KSkuc2xpY2UoMSk7cmV0dXJuIGFqLmNvbmNhdChhaCl9O3ZhciBFPTNEe21pbGxpc2VjPQpvbmQ6
MSxzZWNvbmQ6MTAwMCxtaW51dGU6NjAqMTAwMCxob3VyOjYwKjYwKjEwMDAsZGF5OkMsd2Vlazo3
KkMsbW9udGg6e2FkZDo9CmZ1bmN0aW9uKGFqLGFoKXtFLnllYXIuYWRkKGFqLE1hdGhbYWg+MD8i
Zmxvb3IiOiJjZWlsIl0oYWgvMTIpKTt2YXIgYWk9M0Rhaj0KLmdldE1vbnRoKCkrKGFoJTEyKTtp
ZihhaT0zRD0zRDEyKXthaT0zRDA7YWouc2V0WWVhcihhai5nZXRGdWxsWWVhcigpKzEpfWVsPQpz
ZXtpZihhaT0zRD0zRC0xKXthaT0zRDExO2FqLnNldFllYXIoYWouZ2V0RnVsbFllYXIoKS0xKX19
YWouc2V0TW9udGgoYWkpfSw9CmRpZmY6ZnVuY3Rpb24oYWwsYWope3ZhciBhaD0zRGFsLmdldEZ1
bGxZZWFyKCktYWouZ2V0RnVsbFllYXIoKTt2YXIgYWk9M0RhbD0KLmdldE1vbnRoKCktYWouZ2V0
TW9udGgoKSsoYWgqMTIpO3ZhciBhaz0zRGFsLmdldERhdGUoKS1hai5nZXREYXRlKCk7cmV0dXJu
PQogYWkrKGFrLzMwKX19LHllYXI6e2FkZDpmdW5jdGlvbihhaSxhaCl7YWkuc2V0WWVhcihhaS5n
ZXRGdWxsWWVhcigpK01hdGhbYWg9Cj4wPyJmbG9vciI6ImNlaWwiXShhaCkpfSxkaWZmOmZ1bmN0
aW9uKGFpLGFoKXtyZXR1cm4gRS5tb250aC5kaWZmKGFpLGFoKS8xMj0KfX19O2Zvcih2YXIgWSBp
biBFKXtpZihZLnN1YnN0cmluZyhZLmxlbmd0aC0xKSE9M0QicyIpe0VbWSsicyJdPTNERVtZXX19
dmFyPQogSD0zRGZ1bmN0aW9uKGFsLGFrLGFpKXtpZihhZy5mb3JtYXRzW2FpXVsic2hvcnRjdXRz
Il1bYWtdKXtyZXR1cm4gYWcuc3RyZnQ9CmltZShhbCxhZy5mb3JtYXRzW2FpXVsic2hvcnRjdXRz
Il1bYWtdLGFpKX1lbHNle3ZhciBhaD0zRChhZy5mb3JtYXRzW2FpXVsiYz0Kb2RlcyJdW2FrXXx8
IiIpLnNwbGl0KCIuIik7dmFyIGFqPTNEYWxbImdldCIrYWhbMF1dP2FsWyJnZXQiK2FoWzBdXSgp
OiIiO2lmPQooYWhbMV0pe2FqPTNETihhaixhaFsxXSl9cmV0dXJuIGFqfX07YWcuc3RyZnRpbWU9
M0RmdW5jdGlvbihhbixhayxhaixhbyl7dmE9CnIgYWk9M0QicGVybCI7dmFyIGFtPTNEYWcucmVn
aW9uYWwuZ2V0TG9jYWxlKCk7aWYoYWomJmFnLmZvcm1hdHMuaGFzT3duUHJvcD0KZXJ0eShhaikp
e2FpPTNEYWp9ZWxzZXtpZihhaiYmYWcucmVnaW9uYWwuaGFzT3duUHJvcGVydHkoYWopKXthbT0z
RGFqfX1pZihhPQpvJiZhZy5mb3JtYXRzLmhhc093blByb3BlcnR5KGFvKSl7YWk9M0Rhb31lbHNl
e2lmKGFvJiZhZy5yZWdpb25hbC5oYXNPd25Qcm89CnBlcnR5KGFvKSl7YW09M0Rhb319aWYobChh
bikhPTNEIltvYmplY3QgT2JqZWN0XSJ8fGFuLl90eXBlIT0zRCJqc0RhdGUiKXthbj0KPTNEbmV3
IGFnKGFuKTthbi5sb2NhbGU9M0RhbX1pZighYWspe2FrPTNEYW4uZm9ybWF0U3RyaW5nfHxhZy5y
ZWdpb25hbFthbV1bPQoiZm9ybWF0U3RyaW5nIl19dmFyIGFoPTNEYWt8fCIlWS0lbS0lZCIsYXA9
M0QiIixhbDt3aGlsZShhaC5sZW5ndGg+MCl7aWYoYWw9Cj0zRGFoLm1hdGNoKGFnLmZvcm1hdHNb
YWldLmNvZGVzLm1hdGNoZXIpKXthcCs9M0RhaC5zbGljZSgwLGFsLmluZGV4KTthcCs9Cj0zRChh
bFsxXXx8IiIpK0goYW4sYWxbMl0sYWkpO2FoPTNEYWguc2xpY2UoYWwuaW5kZXgrYWxbMF0ubGVu
Z3RoKX1lbHNle2FwKz0KPTNEYWg7YWg9M0QiIn19cmV0dXJuIGFwfTthZy5mb3JtYXRzPTNEe0lT
TzoiJVktJW0tJWRUJUg6JU06JVMuJU4lRyIsU1FMOiIlPQpZLSVtLSVkICVIOiVNOiVTIn07YWcu
Zm9ybWF0cy5wZXJsPTNEe2NvZGVzOnttYXRjaGVyOi8oKSUoIz8oJXxbYS16XSkpL2ksWTo9CiJG
dWxsWWVhciIseToiU2hvcnRZZWFyLjIiLG06Ik1vbnRoTnVtYmVyLjIiLCIjbSI6Ik1vbnRoTnVt
YmVyIixCOiJNb250aE5hbT0KZSIsYjoiQWJick1vbnRoTmFtZSIsZDoiRGF0ZS4yIiwiI2QiOiJE
YXRlIixlOiJEYXRlIixBOiJEYXlOYW1lIixhOiJBYmJyRGF5PQpOYW1lIix3OiJEYXkiLEg6Ikhv
dXJzLjIiLCIjSCI6IkhvdXJzIixJOiJIb3VyczEyLjIiLCIjSSI6IkhvdXJzMTIiLHA6IkFNUE09
CiIsTToiTWludXRlcy4yIiwiI00iOiJNaW51dGVzIixTOiJTZWNvbmRzLjIiLCIjUyI6IlNlY29u
ZHMiLHM6IlVuaXgiLE46Ik1pbD0KbGlzZWNvbmRzLjMiLCIjTiI6Ik1pbGxpc2Vjb25kcyIsTzoi
VGltZXpvbmVPZmZzZXQiLFo6IlRpbWV6b25lTmFtZSIsRzoiR210PQpPZmZzZXQifSxzaG9ydGN1
dHM6e0Y6IiVZLSVtLSVkIixUOiIlSDolTTolUyIsWDoiJUg6JU06JVMiLHg6IiVtLyVkLyV5IixE
OiI9CiVtLyVkLyV5IiwiI2MiOiIlYSAlYiAlZSAlSDolTTolUyAlWSIsdjoiJWUtJWItJVkiLFI6
IiVIOiVNIixyOiIlSTolTTolUyAlcD0KIix0OiJcdCIsbjoiXG4iLCIlIjoiJSJ9fTthZy5mb3Jt
YXRzLnBocD0zRHtjb2Rlczp7bWF0Y2hlcjovKCklKCglfFthLXpdKSkvPQppLGE6IkFiYnJEYXlO
YW1lIixBOiJEYXlOYW1lIixkOiJEYXRlLjIiLGU6IkRhdGUiLGo6IkRheU9mWWVhci4zIix1OiJE
YXlPZlc9CmVlayIsdzoiRGF5IixVOiJGdWxsV2Vla09mWWVhci4yIixWOiJJc29XZWVrLjIiLFc6
IldlZWtPZlllYXIuMiIsYjoiQWJick1vbj0KdGhOYW1lIixCOiJNb250aE5hbWUiLG06Ik1vbnRo
TnVtYmVyLjIiLGg6IkFiYnJNb250aE5hbWUiLEM6IkNlbnR1cnkuMiIseToiPQpTaG9ydFllYXIu
MiIsWToiRnVsbFllYXIiLEg6IkhvdXJzLjIiLEk6IkhvdXJzMTIuMiIsbDoiSG91cnMxMiIscDoi
QU1QTSIsUDo9CiJBbVBtIixNOiJNaW51dGVzLjIiLFM6IlNlY29uZHMuMiIsczoiVW5peCIsTzoi
VGltZXpvbmVPZmZzZXQiLHo6IkdtdE9mZnNldD0KIixaOiJUaW1lem9uZUFiYnIifSxzaG9ydGN1
dHM6e0Q6IiVtLyVkLyV5IixGOiIlWS0lbS0lZCIsVDoiJUg6JU06JVMiLFg6IiVIPQo6JU06JVMi
LHg6IiVtLyVkLyV5IixSOiIlSDolTSIscjoiJUk6JU06JVMgJXAiLHQ6Ilx0IixuOiJcbiIsIiUi
OiIlIn19O2FnLmM9CnJlYXRlRGF0ZT0zRGZ1bmN0aW9uKGFqKXtpZihhaj0zRD0zRG51bGwpe3Jl
dHVybiBuZXcgRGF0ZSgpfWlmKGFqIGluc3RhbmNlbz0KZiBEYXRlKXtyZXR1cm4gYWp9aWYodHlw
ZW9mIGFqPTNEPTNEIm51bWJlciIpe3JldHVybiBuZXcgRGF0ZShhail9dmFyIGFvPTNEPQpTdHJp
bmcoYWopLnJlcGxhY2UoL15ccyooLispXHMqJC9nLCIkMSIpO2FvPTNEYW8ucmVwbGFjZSgvXihb
MC05XXsxLDR9KS0oWzA9Ci05XXsxLDJ9KS0oWzAtOV17MSw0fSkvLCIkMS8kMi8kMyIpO2FvPTNE
YW8ucmVwbGFjZSgvXigzWzAxXXxbMC0yXT9cZClbLVwvXT0KKFthLXpdezMsfSlbLVwvXShcZHs0
fSkvaSwiJDEgJDIgJDMiKTt2YXIgYW49M0Rhby5tYXRjaCgvXigzWzAxXXxbMC0yXT9cZClbPQot
XC9dKFthLXpdezMsfSlbLVwvXShcZHsyfSlcRCovaSk7aWYoYW4mJmFuLmxlbmd0aD4zKXt2YXIg
YXQ9M0RwYXJzZUZsb2F0KGE9Cm5bM10pO3ZhciBhbT0zRGFnLmNvbmZpZy5kZWZhdWx0Q2VudHVy
eSthdDthbT0zRFN0cmluZyhhbSk7YW89M0Rhby5yZXBsYWNlKD0KL14oM1swMV18WzAtMl0/XGQp
Wy1cL10oW2Etel17Myx9KVstXC9dKFxkezJ9KVxEKi9pLGFuWzFdKyIgIithblsyXSsiICIrYW0p
PQp9YW49M0Rhby5tYXRjaCgvXihbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pWy1cL10oWzAt
OV17MSwyfSlbXjAtOV0vKTtmdW49CmN0aW9uIGFyKGF4LGF3KXt2YXIgYUM9M0RwYXJzZUZsb2F0
KGF3WzFdKTt2YXIgYUI9M0RwYXJzZUZsb2F0KGF3WzJdKTt2YXIgYT0KQT0zRHBhcnNlRmxvYXQo
YXdbM10pO3ZhciBhej0zRGFnLmNvbmZpZy5kZWZhdWx0Q2VudHVyeTt2YXIgYXYsYXUsYUQsYXk7
aWYoPQphQz4zMSl7YXU9M0RhQTthRD0zRGFCO2F2PTNEYXorYUN9ZWxzZXthdT0zRGFCO2FEPTNE
YUM7YXY9M0RheithQX1heT0zRGFEKyI9Ci8iK2F1KyIvIithdjtyZXR1cm4gYXgucmVwbGFjZSgv
XihbMC05XXsxLDJ9KVstXC9dKFswLTldezEsMn0pWy1cL10oWzAtOV17MT0KLDJ9KS8sYXkpfWlm
KGFuJiZhbi5sZW5ndGg+Myl7YW89M0Rhcihhbyxhbil9dmFyIGFuPTNEYW8ubWF0Y2goL14oWzAt
OV17MSwyPQp9KVstXC9dKFswLTldezEsMn0pWy1cL10oWzAtOV17MSwyfSkkLyk7aWYoYW4mJmFu
Lmxlbmd0aD4zKXthbz0zRGFyKGFvLGFuKX09CnZhciBhbD0zRDA7dmFyIGFpPTNEYWcubWF0Y2hl
cnMubGVuZ3RoO3ZhciBhcSxhaCxhcD0zRGFvLGFrO3doaWxlKGFsPGFpKXthaD0KPTNERGF0ZS5w
YXJzZShhcCk7aWYoIWlzTmFOKGFoKSl7cmV0dXJuIG5ldyBEYXRlKGFoKX1hcT0zRGFnLm1hdGNo
ZXJzW2FsXTtpPQpmKHR5cGVvZiBhcT0zRD0zRCJmdW5jdGlvbiIpe2FrPTNEYXEuY2FsbChhZyxh
cCk7aWYoYWsgaW5zdGFuY2VvZiBEYXRlKXtyZXQ9CnVybiBha319ZWxzZXthcD0zRGFvLnJlcGxh
Y2UoYXFbMF0sYXFbMV0pfWFsKyt9cmV0dXJuIE5hTn07YWcuZGF5c0luTW9udGg9Cj0zRGZ1bmN0
aW9uKGFoLGFpKXtpZihhaT0zRD0zRDIpe3JldHVybiBuZXcgRGF0ZShhaCwxLDI5KS5nZXREYXRl
KCk9M0Q9M0QyOT0KPzI5OjI4fXJldHVyblt1LDMxLHUsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEs
MzAsMzFdW2FpXX07YWcubWF0Y2hlcnM9M0RbWy8oPQozWzAxXXxbMC0yXVxkKVxzKlwuXHMqKDFb
MC0yXXwwXGQpXHMqXC5ccyooWzEtOV1cZHszfSkvLCIkMi8kMS8kMyJdLFsvKFsxLTk9Cl1cZHsz
fSlccyotXHMqKDFbMC0yXXwwXGQpXHMqLVxzKigzWzAxXXxbMC0yXVxkKS8sIiQyLyQzLyQxIl0s
ZnVuY3Rpb24oYWspez0KdmFyIGFpPTNEYWsubWF0Y2goL14oPzooLispXHMrKT8oWzAxMl0/XGQp
KD86XHMqXDpccyooXGRcZCkpPyg/OlxzKlw6XHMqKFxkPQpcZChcLlxkKik/KSk/XHMqKGFtfHBt
KT9ccyokL2kpO2lmKGFpKXtpZihhaVsxXSl7dmFyIGFqPTNEdGhpcy5jcmVhdGVEYXRlKGE9Cmlb
MV0pO2lmKGlzTmFOKGFqKSl7cmV0dXJufX1lbHNle3ZhciBhaj0zRG5ldyBEYXRlKCk7YWouc2V0
TWlsbGlzZWNvbmRzKDApfT0KdmFyIGFoPTNEcGFyc2VGbG9hdChhaVsyXSk7aWYoYWlbNl0pe2Fo
PTNEYWlbNl0udG9Mb3dlckNhc2UoKT0zRD0zRCJhbSI/KGFoPQo9M0Q9M0QxMj8wOmFoKTooYWg9
M0Q9M0QxMj8xMjphaCsxMil9YWouc2V0SG91cnMoYWgscGFyc2VJbnQoYWlbM118fDAsMTApLHA9
CmFyc2VJbnQoYWlbNF18fDAsMTApLCgocGFyc2VGbG9hdChhaVs1XXx8MCkpfHwwKSoxMDAwKTty
ZXR1cm4gYWp9ZWxzZXtyZXR1cj0KbiBha319LGZ1bmN0aW9uKGFrKXt2YXIgYWk9M0Rhay5tYXRj
aCgvXig/OiguKykpW1R8XHMrXShbMDEyXVxkKSg/Olw6KFxkXGQpPQopKD86XDooXGRcZCkpKD86
XC5cZCspKFtcK1wtXVxkXGRcOlxkXGQpJC9pKTtpZihhaSl7aWYoYWlbMV0pe3ZhciBhaj0zRHRo
aXM9Ci5jcmVhdGVEYXRlKGFpWzFdKTtpZihpc05hTihhaikpe3JldHVybn19ZWxzZXt2YXIgYWo9
M0RuZXcgRGF0ZSgpO2FqLnNldE1pbD0KbGlzZWNvbmRzKDApfXZhciBhaD0zRHBhcnNlRmxvYXQo
YWlbMl0pO2FqLnNldEhvdXJzKGFoLHBhcnNlSW50KGFpWzNdLDEwKSxwPQphcnNlSW50KGFpWzRd
LDEwKSxwYXJzZUZsb2F0KGFpWzVdKSoxMDAwKTtyZXR1cm4gYWp9ZWxzZXtyZXR1cm4gYWt9fSxm
dW5jdGk9Cm9uKGFsKXt2YXIgYWo9M0RhbC5tYXRjaCgvXihbMC0zXT9cZClccypbLVwvLlxzXXsx
fVxzKihbYS16QS1aXXszLDl9KVxzKlstXD0KLy5cc117MX1ccyooWzAtM10/XGQpJC8pO2lmKGFq
KXt2YXIgYWs9M0RuZXcgRGF0ZSgpO3ZhciBhbT0zRGFnLmNvbmZpZy5kZWZhPQp1bHRDZW50dXJ5
O3ZhciBhbz0zRHBhcnNlRmxvYXQoYWpbMV0pO3ZhciBhbj0zRHBhcnNlRmxvYXQoYWpbM10pO3Zh
ciBhaSxhaCw9CmFwO2lmKGFvPjMxKXthaD0zRGFuO2FpPTNEYW0rYW99ZWxzZXthaD0zRGFvO2Fp
PTNEYW0rYW59dmFyIGFwPTNEYWIoYWpbMl0sYT0KZy5yZWdpb25hbFthZy5yZWdpb25hbC5nZXRM
b2NhbGUoKV1bIm1vbnRoTmFtZXNTaG9ydCJdKTtpZihhcD0zRD0zRC0xKXthcD0KPTNEYWIoYWpb
Ml0sYWcucmVnaW9uYWxbYWcucmVnaW9uYWwuZ2V0TG9jYWxlKCldWyJtb250aE5hbWVzIl0pfWFr
LnNldEZ1bGxZPQplYXIoYWksYXAsYWgpO2FrLnNldEhvdXJzKDAsMCwwLDApO3JldHVybiBha31l
bHNle3JldHVybiBhbH19XTtmdW5jdGlvbiBhYig9CmFqLGFrKXtpZihhay5pbmRleE9mKXtyZXR1
cm4gYWsuaW5kZXhPZihhail9Zm9yKHZhciBhaD0zRDAsYWk9M0Rhay5sZW5ndGg7YT0KaDxhaTth
aCsrKXtpZihha1thaF09M0Q9M0Q9M0Rhail7cmV0dXJuIGFofX1yZXR1cm4gLTF9ZnVuY3Rpb24g
bChhaCl7aWYoYWg9Cj0zRD0zRD0zRG51bGwpe3JldHVybiJbb2JqZWN0IE51bGxdIn1yZXR1cm4g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKD0KYWgpfUwuanNEYXRlPTNEYWc7TC5qcXBs
b3Quc3ByaW50Zj0zRGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYW4oYXUsYXAsYXEsYXQpe3ZhPQpyIGFy
PTNEKGF1Lmxlbmd0aD49M0RhcCk/IiI6QXJyYXkoMSthcC1hdS5sZW5ndGg+Pj4wKS5qb2luKGFx
KTtyZXR1cm4gYXQ/YXU9CithcjphcithdX1mdW5jdGlvbiBhayhhcil7dmFyIGFxPTNEbmV3IFN0
cmluZyhhcik7Zm9yKHZhciBhcD0zRDEwO2FwPjA7YXAtLT0KKXtpZihhcT0zRD0zRChhcT0zRGFx
LnJlcGxhY2UoL14oXGQrKShcZHszfSkvLCIkMSIrTC5qcXBsb3Quc3ByaW50Zi50aG91c2FuPQpk
c1NlcGFyYXRvcisiJDIiKSkpe2JyZWFrfX1yZXR1cm4gYXF9ZnVuY3Rpb24gYWooYXYsYXUsYXgs
YXIsYXQsYXEpe3ZhciBhdz0KPTNEYXItYXYubGVuZ3RoO2lmKGF3PjApe3ZhciBhcD0zRCIgIjtp
ZihhcSl7YXA9M0QiJm5ic3A7In1pZihheHx8IWF0KXthdj0KPTNEYW4oYXYsYXIsYXAsYXgpfWVs
c2V7YXY9M0Rhdi5zbGljZSgwLGF1Lmxlbmd0aCkrYW4oIiIsYXcsIjAiLHRydWUpK2F2LnNsPQpp
Y2UoYXUubGVuZ3RoKX19cmV0dXJuIGF2fWZ1bmN0aW9uIGFvKGF5LGFxLGF3LGFyLGFwLGF2LGF4
LGF1KXt2YXIgYXQ9M0RheT49Cj4+MDthdz0zRGF3JiZhdCYmeyIyIjoiMGIiLCI4IjoiMCIsIjE2
IjoiMHgifVthcV18fCIiO2F5PTNEYXcrYW4oYXQudG9TdHJpbj0KZyhhcSksYXZ8fDAsIjAiLGZh
bHNlKTtyZXR1cm4gYWooYXksYXcsYXIsYXAsYXgsYXUpfWZ1bmN0aW9uIGFoKGF1LGF2LGFyLGFw
PQosYXQsYXEpe2lmKGFwIT0zRG51bGwpe2F1PTNEYXUuc2xpY2UoMCxhcCl9cmV0dXJuIGFqKGF1
LCIiLGF2LGFyLGF0LGFxKX12YXI9CiBhaT0zRGFyZ3VtZW50cyxhbD0zRDAsYW09M0RhaVthbCsr
XTtyZXR1cm4gYW0ucmVwbGFjZShMLmpxcGxvdC5zcHJpbnRmLnJlZz0KZXgsZnVuY3Rpb24oYU0s
YXgsYXksYUIsYU8sYUosYXYpe2lmKGFNPTNEPTNEIiUlIil7cmV0dXJuIiUifXZhciBhRD0zRGZh
bHNlPQosYXo9M0QiIixhQT0zRGZhbHNlLGFMPTNEZmFsc2UsYXc9M0RmYWxzZSxhdT0zRGZhbHNl
O2Zvcih2YXIgYUk9M0QwO2F5JiZhSTw9CmF5Lmxlbmd0aDthSSsrKXtzd2l0Y2goYXkuY2hhckF0
KGFJKSl7Y2FzZSIgIjphej0zRCIgIjticmVhaztjYXNlIisiOmF6PTNEIj0KKyI7YnJlYWs7Y2Fz
ZSItIjphRD0zRHRydWU7YnJlYWs7Y2FzZSIwIjphQT0zRHRydWU7YnJlYWs7Y2FzZSIjIjphTD0z
RHRydWU7PQpicmVhaztjYXNlIiYiOmF3PTNEdHJ1ZTticmVhaztjYXNlIiciOmF1PTNEdHJ1ZTti
cmVha319aWYoIWFCKXthQj0zRDB9ZWxzZXs9CmlmKGFCPTNEPTNEIioiKXthQj0zRCthaVthbCsr
XX1lbHNle2lmKGFCLmNoYXJBdCgwKT0zRD0zRCIqIil7YUI9M0QrYWlbYUIucz0KbGljZSgxLC0x
KV19ZWxzZXthQj0zRCthQn19fWlmKGFCPDApe2FCPTNELWFCO2FEPTNEdHJ1ZX1pZighaXNGaW5p
dGUoYUIpKXt0PQpocm93IG5ldyBFcnJvcigiJC5qcXBsb3Quc3ByaW50ZjogKG1pbmltdW0tKXdp
ZHRoIG11c3QgYmUgZmluaXRlIil9aWYoIWFKKXs9CmFKPTNEImZGZUUiLmluZGV4T2YoYXYpPi0x
PzY6KGF2PTNEPTNEImQiKT8wOnZvaWQgKDApfWVsc2V7aWYoYUo9M0Q9M0QiKiIpez0KYUo9M0Qr
YWlbYWwrK119ZWxzZXtpZihhSi5jaGFyQXQoMCk9M0Q9M0QiKiIpe2FKPTNEK2FpW2FKLnNsaWNl
KDEsLTEpXX1lbHNlPQp7YUo9M0QrYUp9fX12YXIgYUY9M0RheD9haVtheC5zbGljZSgwLC0xKV06
YWlbYWwrK107c3dpdGNoKGF2KXtjYXNlInMiOmlmKGE9CkY9M0Q9M0RudWxsKXtyZXR1cm4iIn1y
ZXR1cm4gYWgoU3RyaW5nKGFGKSxhRCxhQixhSixhQSxhdyk7Y2FzZSJjIjpyZXR1cm4gYT0KaChT
dHJpbmcuZnJvbUNoYXJDb2RlKCthRiksYUQsYUIsYUosYUEsYXcpO2Nhc2UiYiI6cmV0dXJuIGFv
KGFGLDIsYUwsYUQsYUIsPQphSixhQSxhdyk7Y2FzZSJvIjpyZXR1cm4gYW8oYUYsOCxhTCxhRCxh
QixhSixhQSxhdyk7Y2FzZSJ4IjpyZXR1cm4gYW8oYUYsMTY9CixhTCxhRCxhQixhSixhQSxhdyk7
Y2FzZSJYIjpyZXR1cm4gYW8oYUYsMTYsYUwsYUQsYUIsYUosYUEsYXcpLnRvVXBwZXJDYXNlKD0K
KTtjYXNlInUiOnJldHVybiBhbyhhRiwxMCxhTCxhRCxhQixhSixhQSxhdyk7Y2FzZSJpIjp2YXIg
YXI9M0RwYXJzZUludCgrYUYsPQoxMCk7aWYoaXNOYU4oYXIpKXtyZXR1cm4iIn12YXIgYUg9M0Rh
cjwwPyItIjphejt2YXIgYUs9M0RhdT9hayhTdHJpbmcoTWF0aC49CmFicyhhcikpKTpTdHJpbmco
TWF0aC5hYnMoYXIpKTthRj0zRGFIK2FuKGFLLGFKLCIwIixmYWxzZSk7cmV0dXJuIGFqKGFGLGFI
LD0KYUQsYUIsYUEsYXcpO2Nhc2UiZCI6dmFyIGFyPTNETWF0aC5yb3VuZCgrYUYpO2lmKGlzTmFO
KGFyKSl7cmV0dXJuIiJ9dmFyIGFIPQo9M0RhcjwwPyItIjphejt2YXIgYUs9M0RhdT9hayhTdHJp
bmcoTWF0aC5hYnMoYXIpKSk6U3RyaW5nKE1hdGguYWJzKGFyKSk7YUY9Cj0zRGFIK2FuKGFLLGFK
LCIwIixmYWxzZSk7cmV0dXJuIGFqKGFGLGFILGFELGFCLGFBLGF3KTtjYXNlImUiOmNhc2UiRSI6
Y2FzZT0KImYiOmNhc2UiRiI6Y2FzZSJnIjpjYXNlIkciOnZhciBhcj0zRCthRjtpZihpc05hTihh
cikpe3JldHVybiIifXZhciBhSD0zRGFyPQo8MD8iLSI6YXo7dmFyIGF0PTNEWyJ0b0V4cG9uZW50
aWFsIiwidG9GaXhlZCIsInRvUHJlY2lzaW9uIl1bImVmZyIuaW5kZXhPZig9CmF2LnRvTG93ZXJD
YXNlKCkpXTt2YXIgYU49M0RbInRvU3RyaW5nIiwidG9VcHBlckNhc2UiXVsiZUVmRmdHIi5pbmRl
eE9mKGF2KT0KJTJdO3ZhciBhSz0zRE1hdGguYWJzKGFyKVthdF0oYUopO3ZhciBhRT0zRGFLLnRv
U3RyaW5nKCkuc3BsaXQoIi4iKTthRVswXT0KPTNEYXU/YWsoYUVbMF0pOmFFWzBdO2FLPTNEYUUu
am9pbihMLmpxcGxvdC5zcHJpbnRmLmRlY2ltYWxNYXJrKTthRj0zRGFIK2FLPQo7dmFyIGFDPTNE
YWooYUYsYUgsYUQsYUIsYUEsYXcpW2FOXSgpO3JldHVybiBhQztjYXNlInAiOmNhc2UiUCI6dmFy
IGFyPTNEK2E9CkY7aWYoaXNOYU4oYXIpKXtyZXR1cm4iIn12YXIgYUg9M0RhcjwwPyItIjphejt2
YXIgYUU9M0RTdHJpbmcoTnVtYmVyKE1hdGguYT0KYnMoYXIpKS50b0V4cG9uZW50aWFsKCkpLnNw
bGl0KC9lfEUvKTt2YXIgYXE9M0QoYUVbMF0uaW5kZXhPZigiLiIpIT0zRC0xKT9hPQpFWzBdLmxl
bmd0aC0xOlN0cmluZyhhcikubGVuZ3RoO3ZhciBhRz0zRChhRVsxXTwwKT8tYUVbMV0tMTowO2lm
KE1hdGguYWJzKGE9CnIpPDEpe2lmKGFxK2FHPD0zRGFKKXthRj0zRGFIK01hdGguYWJzKGFyKS50
b1ByZWNpc2lvbihhcSl9ZWxzZXtpZihhcTw9M0RhSj0KLTEpe2FGPTNEYUgrTWF0aC5hYnMoYXIp
LnRvRXhwb25lbnRpYWwoYXEtMSl9ZWxzZXthRj0zRGFIK01hdGguYWJzKGFyKS50b0V4PQpwb25l
bnRpYWwoYUotMSl9fX1lbHNle3ZhciBhcD0zRChhcTw9M0RhSik/YXE6YUo7YUY9M0RhSCtNYXRo
LmFicyhhcikudG9QcmU9CmNpc2lvbihhcCl9dmFyIGFOPTNEWyJ0b1N0cmluZyIsInRvVXBwZXJD
YXNlIl1bInBQIi5pbmRleE9mKGF2KSUyXTtyZXR1cm4gYT0KaihhRixhSCxhRCxhQixhQSxhdylb
YU5dKCk7Y2FzZSJuIjpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiBhTX19KX07TC5qcXBsb3QuPQpz
cHJpbnRmLnRob3VzYW5kc1NlcGFyYXRvcj0zRCIsIjtMLmpxcGxvdC5zcHJpbnRmLmRlY2ltYWxN
YXJrPTNEIi4iO0wuanFwbG89CnQuc3ByaW50Zi5yZWdleD0zRC8lJXwlKFxkK1wkKT8oWy0rIzAm
XCcgXSopKFwqXGQrXCR8XCp8XGQrKT8oXC4oXCpcZCtcJHxcKj0KfFxkKykpPyhbbkFzY2JveFh1
aWRmZWdwRUdQXSkvZztMLmpxcGxvdC5nZXRTaWduaWZpY2FudEZpZ3VyZXM9M0RmdW5jdGlvbihh
PQpsKXt2YXIgYW49M0RTdHJpbmcoTnVtYmVyKE1hdGguYWJzKGFsKSkudG9FeHBvbmVudGlhbCgp
KS5zcGxpdCgvZXxFLyk7dmFyIGE9Cm09M0QoYW5bMF0uaW5kZXhPZigiLiIpIT0zRC0xKT9hblsw
XS5sZW5ndGgtMTphblswXS5sZW5ndGg7dmFyIGFpPTNEKGFuWzFdPD0KMCk/LWFuWzFdLTE6MDt2
YXIgYWg9M0RwYXJzZUludChhblsxXSwxMCk7dmFyIGFqPTNEKGFoKzE+MCk/YWgrMTowO3ZhciBh
az0KPTNEKGFtPD0zRGFqKT8wOmFtLWFoLTE7cmV0dXJue3NpZ25pZmljYW50RGlnaXRzOmFtLGRp
Z2l0c0xlZnQ6YWosZGlnaXRzUmlnPQpodDphayx6ZXJvczphaSxleHBvbmVudDphaH19O0wuanFw
bG90LmdldFByZWNpc2lvbj0zRGZ1bmN0aW9uKGFoKXtyZXR1cm4gTC49CmpxcGxvdC5nZXRTaWdu
aWZpY2FudEZpZ3VyZXMoYWgpLmRpZ2l0c1JpZ2h0fTt2YXIgWD0zREwudWlCYWNrQ29tcGF0IT0z
RD0zRD0KZmFsc2U7TC5qcXBsb3QuZWZmZWN0cz0zRHtlZmZlY3Q6e319O3ZhciBtPTNEImpxcGxv
dC5zdG9yYWdlLiI7TC5leHRlbmQoTC5qPQpxcGxvdC5lZmZlY3RzLHt2ZXJzaW9uOiIxLjlwcmUi
LHNhdmU6ZnVuY3Rpb24oYWksYWope2Zvcih2YXIgYWg9M0QwO2FoPGFqLmw9CmVuZ3RoO2FoKysp
e2lmKGFqW2FoXSE9M0Q9M0RudWxsKXthaS5kYXRhKG0rYWpbYWhdLGFpWzBdLnN0eWxlW2FqW2Fo
XV0pfX19LD0KcmVzdG9yZTpmdW5jdGlvbihhaSxhail7Zm9yKHZhciBhaD0zRDA7YWg8YWoubGVu
Z3RoO2FoKyspe2lmKGFqW2FoXSE9M0Q9M0RuPQp1bGwpe2FpLmNzcyhhalthaF0sYWkuZGF0YSht
K2FqW2FoXSkpfX19LHNldE1vZGU6ZnVuY3Rpb24oYWgsYWkpe2lmKGFpPTNEPQo9M0Q9M0QidG9n
Z2xlIil7YWk9M0RhaC5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSJ9cmV0dXJuIGFpfSxjcmVh
dGVXcmFwcGU9CnI6ZnVuY3Rpb24oYWkpe2lmKGFpLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13
cmFwcGVyIikpe3JldHVybiBhaS5wYXJlbnQoKT0KfXZhciBhaj0zRHt3aWR0aDphaS5vdXRlcldp
ZHRoKHRydWUpLGhlaWdodDphaS5vdXRlckhlaWdodCh0cnVlKSwiZmxvYXQiOmFpPQouY3NzKCJm
bG9hdCIpfSxhbD0zREwoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBl
ciIpLmNzcyh7Zm89Cm50U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRl
cjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksYT0KaD0zRHt3aWR0aDphaS53aWR0aCgpLGhl
aWdodDphaS5oZWlnaHQoKX0sYWs9M0Rkb2N1bWVudC5hY3RpdmVFbGVtZW50O2FpLndyPQphcChh
bCk7aWYoYWlbMF09M0Q9M0Q9M0Rha3x8TC5jb250YWlucyhhaVswXSxhaykpe0woYWspLmZvY3Vz
KCl9YWw9M0RhaS5wYXI9CmVudCgpO2lmKGFpLmNzcygicG9zaXRpb24iKT0zRD0zRD0zRCJzdGF0
aWMiKXthbC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KT0KO2FpLmNzcyh7cG9zaXRpb246InJl
bGF0aXZlIn0pfWVsc2V7TC5leHRlbmQoYWose3Bvc2l0aW9uOmFpLmNzcygicG9zaXRpb24iPQop
LHpJbmRleDphaS5jc3MoInotaW5kZXgiKX0pO0wuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20i
LCJyaWdodCJdLGZ1bmN0aW89Cm4oYW0sYW4pe2FqW2FuXT0zRGFpLmNzcyhhbik7aWYoaXNOYU4o
cGFyc2VJbnQoYWpbYW5dLDEwKSkpe2FqW2FuXT0zRCJhdXRvIj0KfX0pO2FpLmNzcyh7cG9zaXRp
b246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KX1h
PQppLmNzcyhhaCk7cmV0dXJuIGFsLmNzcyhhaikuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0
aW9uKGFoKXt2YXIgYWk9M0Rkb2M9CnVtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoYWgucGFyZW50KCku
aXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSl7YWgucGFyZW50KCkucj0KZXBsYWNlV2l0aChhaCk7
aWYoYWhbMF09M0Q9M0Q9M0RhaXx8TC5jb250YWlucyhhaFswXSxhaSkpe0woYWkpLmZvY3VzKCl9
fXJlPQp0dXJuIGFofX0pO2Z1bmN0aW9uIGooYWksYWgsYWosYWspe2lmKEwuaXNQbGFpbk9iamVj
dChhaSkpe3JldHVybiBhaX1haT0zRHs9CmVmZmVjdDphaX07aWYoYWg9M0Q9M0Q9M0R1KXthaD0z
RHt9fWlmKEwuaXNGdW5jdGlvbihhaCkpe2FrPTNEYWg7YWo9M0RudWxsOz0KYWg9M0R7fX1pZihM
LnR5cGUoYWgpPTNEPTNEPTNEIm51bWJlciJ8fEwuZnguc3BlZWRzW2FoXSl7YWs9M0Rhajthaj0z
RGFoO2FoPQo9M0R7fX1pZihMLmlzRnVuY3Rpb24oYWopKXthaz0zRGFqO2FqPTNEbnVsbH1pZihh
aCl7TC5leHRlbmQoYWksYWgpfWFqPTNEYWo9Cnx8YWguZHVyYXRpb247YWkuZHVyYXRpb249M0RM
LmZ4Lm9mZj8wOnR5cGVvZiBhaj0zRD0zRD0zRCJudW1iZXIiP2FqOmFqIGluID0KTC5meC5zcGVl
ZHM/TC5meC5zcGVlZHNbYWpdOkwuZnguc3BlZWRzLl9kZWZhdWx0O2FpLmNvbXBsZXRlPTNEYWt8
fGFoLmNvbXBsPQpldGU7cmV0dXJuIGFpfWZ1bmN0aW9uIGFlKGFoKXtpZighYWh8fHR5cGVvZiBh
aD0zRD0zRD0zRCJudW1iZXIifHxMLmZ4LnNwZWU9CmRzW2FoXSl7cmV0dXJuIHRydWV9aWYodHlw
ZW9mIGFoPTNEPTNEPTNEInN0cmluZyImJiFMLmpxcGxvdC5lZmZlY3RzLmVmZmVjdD0KW2FoXSl7
aWYoWCYmTC5qcXBsb3QuZWZmZWN0c1thaF0pe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1yZXR1
cm4gZmFsc2V9TC5mPQpuLmV4dGVuZCh7anFwbG90RWZmZWN0OmZ1bmN0aW9uKGFwLGFxLGFpLGFv
KXt2YXIgYW49M0RqLmFwcGx5KHRoaXMsYXJndW1lbnQ9CnMpLGFrPTNEYW4ubW9kZSxhbD0zRGFu
LnF1ZXVlLGFtPTNETC5qcXBsb3QuZWZmZWN0cy5lZmZlY3RbYW4uZWZmZWN0XSxhaD0zRD0KIWFt
JiZYJiZMLmpxcGxvdC5lZmZlY3RzW2FuLmVmZmVjdF07aWYoTC5meC5vZmZ8fCEoYW18fGFoKSl7
aWYoYWspe3JldHVybiB0PQpoaXNbYWtdKGFuLmR1cmF0aW9uLGFuLmNvbXBsZXRlKX1lbHNle3Jl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihhbi5jb209CnBsZXRlKXthbi5jb21wbGV0ZS5j
YWxsKHRoaXMpfX0pfX1mdW5jdGlvbiBhaihhdSl7dmFyIGF2PTNETCh0aGlzKSxhdD0zRGFuLj0K
Y29tcGxldGUsYXc9M0Rhbi5tb2RlO2Z1bmN0aW9uIGFyKCl7aWYoTC5pc0Z1bmN0aW9uKGF0KSl7
YXQuY2FsbChhdlswXSl9aWYoPQpMLmlzRnVuY3Rpb24oYXUpKXthdSgpfX1pZihhdi5pcygiOmhp
ZGRlbiIpP2F3PTNEPTNEPTNEImhpZGUiOmF3PTNEPTNEPTNEInM9CmhvdyIpe2FyKCl9ZWxzZXth
bS5jYWxsKGF2WzBdLGFuLGFyKX19aWYoYW0pe3JldHVybiBhbD0zRD0zRD0zRGZhbHNlP3RoaXMu
ZT0KYWNoKGFqKTp0aGlzLnF1ZXVlKGFsfHwiZngiLGFqKX1lbHNle3JldHVybiBhaC5jYWxsKHRo
aXMse29wdGlvbnM6YW4sZHVyYXRpPQpvbjphbi5kdXJhdGlvbixjYWxsYmFjazphbi5jb21wbGV0
ZSxtb2RlOmFuLm1vZGV9KX19fSk7dmFyIGE9M0QvdXB8ZG93bnx2ZXI9CnRpY2FsLyx2PTNEL3Vw
fGxlZnR8dmVydGljYWx8aG9yaXpvbnRhbC87TC5qcXBsb3QuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9
M0RmdT0KbmN0aW9uKGFqLGFvKXt2YXIgYWs9M0RMKHRoaXMpLGFyPTNEWyJwb3NpdGlvbiIsInRv
cCIsImJvdHRvbSIsImxlZnQiLCJyaWdoPQp0IiwiaGVpZ2h0Iiwid2lkdGgiXSxhcD0zREwuanFw
bG90LmVmZmVjdHMuc2V0TW9kZShhayxhai5tb2RlfHwiaGlkZSIpLGF1PQo9M0Rhai5kaXJlY3Rp
b258fCJ1cCIsYW09M0RhLnRlc3QoYXUpLGFsPTNEYW0/ImhlaWdodCI6IndpZHRoIixhcT0zRGFt
PyJ0b3A9CiI6ImxlZnQiLGF3PTNEdi50ZXN0KGF1KSxhbj0zRHt9LGF2PTNEYXA9M0Q9M0Q9M0Qi
c2hvdyIsYWksYWgsYXQ7aWYoYWsucGFyZT0KbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIp
KXtMLmpxcGxvdC5lZmZlY3RzLnNhdmUoYWsucGFyZW50KCksYXIpfWVsc2V7PQpMLmpxcGxvdC5l
ZmZlY3RzLnNhdmUoYWssYXIpfWFrLnNob3coKTthdD0zRHBhcnNlSW50KGFrLmNzcygidG9wIiks
MTApO2FpPQo9M0RMLmpxcGxvdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYWspLmNzcyh7b3ZlcmZs
b3c6ImhpZGRlbiJ9KTthaD0zRGFtP2FpW2E9CmxdKCkrYXQ6YWlbYWxdKCk7YW5bYWxdPTNEYXY/
U3RyaW5nKGFoKToiMCI7aWYoIWF3KXthay5jc3MoYW0/ImJvdHRvbSI6InJpZz0KaHQiLDApLmNz
cyhhbT8idG9wIjoibGVmdCIsIiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIn0pO2FuW2FxXT0z
RGF2PyIwIjpTPQp0cmluZyhhaCl9aWYoYXYpe2FpLmNzcyhhbCwwKTtpZighYXcpe2FpLmNzcyhh
cSxhaCl9fWFpLmFuaW1hdGUoYW4se2R1cmF0aW89Cm46YWouZHVyYXRpb24sZWFzaW5nOmFqLmVh
c2luZyxxdWV1ZTpmYWxzZSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKGFwPTNEPTNEPQo9M0QiaGlk
ZSIpe2FrLmhpZGUoKX1MLmpxcGxvdC5lZmZlY3RzLnJlc3RvcmUoYWssYXIpO0wuanFwbG90LmVm
ZmVjdHMucmVtb3Y9CmVXcmFwcGVyKGFrKTthbygpfX0pfX0pKGpRdWVyeSk7ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgw
Y2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBj
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3BsdWdpbnMvanFwbG89
CnQvanF1ZXJ5LmpxcGxvdC5wbHVnaW5zLmpzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvdC9qcXVlcnku
anFwPQpsb3QucGx1Z2lucy5qcwpAQCAtMCwwICsxLDE5IEBACisvKiBqcVBsb3QgMS4wLjhyMTI1
MCB8IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8gfCBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8
IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihkKXtkLmpxcGxvdC5C
YXJSZW5kZXJlcj0zRGZ1bmN0aW9uKCl7ZC5qcXBsb3QuTGluZVJlbmRlcmVyLmNhPQpsbCh0aGlz
KX07ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlPTNEbmV3IGQuanFwbG90LkxpbmVSZW5k
ZXJlcigpO2QuanE9CnBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPTNEZC5q
cXBsb3QuQmFyUmVuZGVyZXI7ZC5qcXBsb3QuQmFyUj0KZW5kZXJlci5wcm90b3R5cGUuaW5pdD0z
RGZ1bmN0aW9uKG8scSl7dGhpcy5iYXJQYWRkaW5nPTNEODt0aGlzLmJhck1hcmdpbj0KPTNEMTA7
dGhpcy5iYXJEaXJlY3Rpb249M0QidmVydGljYWwiO3RoaXMuYmFyV2lkdGg9M0RudWxsO3RoaXMu
c2hhZG93T2Zmc2V0PQo9M0QyO3RoaXMuc2hhZG93RGVwdGg9M0Q1O3RoaXMuc2hhZG93QWxwaGE9
M0QwLjA4O3RoaXMud2F0ZXJmYWxsPTNEZmFsc2U7dGg9CmlzLmdyb3Vwcz0zRDE7dGhpcy52YXJ5
QmFyQ29sb3I9M0RmYWxzZTt0aGlzLmhpZ2hsaWdodE1vdXNlT3Zlcj0zRHRydWU7dGhpcz0KLmhp
Z2hsaWdodE1vdXNlRG93bj0zRGZhbHNlO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPTNEW107dGhpcy50
cmFuc3Bvc2VkRGF0YT0KPTNEdHJ1ZTt0aGlzLnJlbmRlcmVyLmFuaW1hdGlvbj0zRHtzaG93OmZh
bHNlLGRpcmVjdGlvbjoiZG93biIsc3BlZWQ6MzAwMCxfPQpzdXBwb3J0ZWQ6dHJ1ZX07dGhpcy5f
dHlwZT0zRCJiYXIiO2lmKG8uaGlnaGxpZ2h0TW91c2VEb3duJiZvLmhpZ2hsaWdodE1vdXM9CmVP
dmVyPTNEPTNEbnVsbCl7by5oaWdobGlnaHRNb3VzZU92ZXI9M0RmYWxzZX1kLmV4dGVuZCh0cnVl
LHRoaXMsbyk7ZC5leHRlbj0KZCh0cnVlLHRoaXMucmVuZGVyZXIsbyk7dGhpcy5maWxsPTNEdHJ1
ZTtpZih0aGlzLmJhckRpcmVjdGlvbj0zRD0zRD0zRCJob3JpPQp6b250YWwiJiZ0aGlzLnJlbmRl
cmVyT3B0aW9ucy5hbmltYXRpb24mJnRoaXMucmVuZGVyZXJPcHRpb25zLmFuaW1hdGlvbi5kaXI9
CmVjdGlvbj0zRD0zRG51bGwpe3RoaXMucmVuZGVyZXIuYW5pbWF0aW9uLmRpcmVjdGlvbj0zRCJs
ZWZ0In1pZih0aGlzLndhdGVyZj0KYWxsKXt0aGlzLmZpbGxUb1plcm89M0RmYWxzZTt0aGlzLmRp
c2FibGVTdGFjaz0zRHRydWV9aWYodGhpcy5iYXJEaXJlY3Rpb249Cj0zRD0zRCJ2ZXJ0aWNhbCIp
e3RoaXMuX3ByaW1hcnlBeGlzPTNEIl94YXhpcyI7dGhpcy5fc3RhY2tBeGlzPTNEInkiO3RoaXMu
Zj0KaWxsQXhpcz0zRCJ5In1lbHNle3RoaXMuX3ByaW1hcnlBeGlzPTNEIl95YXhpcyI7dGhpcy5f
c3RhY2tBeGlzPTNEIngiO3RoaXMuPQpmaWxsQXhpcz0zRCJ4In10aGlzLl9oaWdobGlnaHRlZFBv
aW50PTNEbnVsbDt0aGlzLl9wbG90U2VyaWVzSW5mbz0zRG51bGw7dGg9CmlzLl9kYXRhQ29sb3Jz
PTNEW107dGhpcy5fYmFyUG9pbnRzPTNEW107dmFyIHA9M0R7bGluZUpvaW46Im1pdGVyIixsaW5l
Q2FwOj0KInJvdW5kIixmaWxsOnRydWUsaXNhcmM6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5jb2xv
cixmaWxsU3R5bGU6dGhpcy5jb2xvcixjPQpsb3NlUGF0aDp0aGlzLmZpbGx9O3RoaXMucmVuZGVy
ZXIuc2hhcGVSZW5kZXJlci5pbml0KHApO3ZhciBuPTNEe2xpbmVKb2luOiI9Cm1pdGVyIixsaW5l
Q2FwOiJyb3VuZCIsZmlsbDp0cnVlLGlzYXJjOmZhbHNlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUs
b2Zmc2V0Oj0KdGhpcy5zaGFkb3dPZmZzZXQsYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSxkZXB0aDp0
aGlzLnNoYWRvd0RlcHRoLGNsb3NlUGF0aDp0PQpoaXMuZmlsbH07dGhpcy5yZW5kZXJlci5zaGFk
b3dSZW5kZXJlci5pbml0KG4pO3EucG9zdEluaXRIb29rcy5hZGRPbmNlKGgpO3E9Ci5wb3N0RHJh
d0hvb2tzLmFkZE9uY2Uoaik7cS5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91
c2VNb3ZlIixiKT0KO3EuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlRG93
biIsYSk7cS5ldmVudExpc3RlbmVySG9va3MuYWRkPQpPbmNlKCJqcXBsb3RNb3VzZVVwIixsKTtx
LmV2ZW50TGlzdGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RDbGljayIsZSk7cS5ldmU9Cm50TGlz
dGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RSaWdodENsaWNrIixtKX07ZnVuY3Rpb24gZyh0LHAs
byx3KXtpZih0aGlzLj0KcmVuZGVyZXJPcHRpb25zLmJhckRpcmVjdGlvbj0zRD0zRCJob3Jpem9u
dGFsIil7dGhpcy5fc3RhY2tBeGlzPTNEIngiO3RoaXMuPQpfcHJpbWFyeUF4aXM9M0QiX3lheGlz
In1pZih0aGlzLnJlbmRlcmVyT3B0aW9ucy53YXRlcmZhbGw9M0Q9M0R0cnVlKXt0aGlzLl89CmRh
dGE9M0RkLmV4dGVuZCh0cnVlLFtdLHRoaXMuZGF0YSk7dmFyIHM9M0QwO3ZhciB1PTNEKCF0aGlz
LnJlbmRlcmVyT3B0aW9ucz0KLmJhckRpcmVjdGlvbnx8dGhpcy5yZW5kZXJlck9wdGlvbnMuYmFy
RGlyZWN0aW9uPTNEPTNEPTNEInZlcnRpY2FsInx8dGhpcy50PQpyYW5zcG9zZWREYXRhPTNEPTNE
PTNEZmFsc2UpPzE6MDtmb3IodmFyIHE9M0QwO3E8dGhpcy5kYXRhLmxlbmd0aDtxKyspe3MrPQo9
M0R0aGlzLmRhdGFbcV1bdV07aWYocT4wKXt0aGlzLmRhdGFbcV1bdV0rPTNEdGhpcy5kYXRhW3Et
MV1bdV19fXRoaXMuZGF0YVs9CnRoaXMuZGF0YS5sZW5ndGhdPTNEKHU9M0Q9M0QxKT9bdGhpcy5k
YXRhLmxlbmd0aCsxLHNdOltzLHRoaXMuZGF0YS5sZW5ndGgrMT0KXTt0aGlzLl9kYXRhW3RoaXMu
X2RhdGEubGVuZ3RoXT0zRCh1PTNEPTNEMSk/W3RoaXMuX2RhdGEubGVuZ3RoKzEsc106W3MsdGhp
PQpzLl9kYXRhLmxlbmd0aCsxXX1pZih0aGlzLnJlbmRlcmVyT3B0aW9ucy5ncm91cHM+MSl7dGhp
cy5icmVha09uTnVsbD0zRHRydWU9Cjt2YXIgbj0zRHRoaXMuZGF0YS5sZW5ndGg7dmFyIHY9M0Rw
YXJzZUludChuL3RoaXMucmVuZGVyZXJPcHRpb25zLmdyb3VwcywxMD0KKTt2YXIgcj0zRDA7Zm9y
KHZhciBxPTNEdjtxPG47cSs9M0R2KXt0aGlzLmRhdGEuc3BsaWNlKHErciwwLFtudWxsLG51bGxd
KTt0PQpoaXMuX3Bsb3REYXRhLnNwbGljZShxK3IsMCxbbnVsbCxudWxsXSk7dGhpcy5fc3RhY2tE
YXRhLnNwbGljZShxK3IsMCxbbnVsbCw9Cm51bGxdKTtyKyt9Zm9yKHE9M0QwO3E8dGhpcy5kYXRh
Lmxlbmd0aDtxKyspe2lmKHRoaXMuX3ByaW1hcnlBeGlzPTNEPTNEIl94YT0KeGlzIil7dGhpcy5k
YXRhW3FdWzBdPTNEcSsxO3RoaXMuX3Bsb3REYXRhW3FdWzBdPTNEcSsxO3RoaXMuX3N0YWNrRGF0
YVtxXVswPQpdPTNEcSsxfWVsc2V7dGhpcy5kYXRhW3FdWzFdPTNEcSsxO3RoaXMuX3Bsb3REYXRh
W3FdWzFdPTNEcSsxO3RoaXMuX3N0YWNrRGE9CnRhW3FdWzFdPTNEcSsxfX19fWQuanFwbG90LnBy
ZVNlcmllc0luaXRIb29rcy5wdXNoKGcpO2QuanFwbG90LkJhclJlbmRlcmVyLj0KcHJvdG90eXBl
LmNhbGNTZXJpZXNOdW1iZXJzPTNEZnVuY3Rpb24oKXt2YXIgcj0zRDA7dmFyIHQ9M0QwO3ZhciBx
PTNEdGhpc1t0PQpoaXMuX3ByaW1hcnlBeGlzXTt2YXIgcCxvLHU7Zm9yKHZhciBuPTNEMDtuPHEu
X3Nlcmllcy5sZW5ndGg7bisrKXtvPTNEcS5fc2U9CnJpZXNbbl07aWYobz0zRD0zRD0zRHRoaXMp
e3U9M0RufWlmKG8ucmVuZGVyZXIuY29uc3RydWN0b3I9M0Q9M0RkLmpxcGxvdC5CYT0KclJlbmRl
cmVyKXtyKz0zRG8uZGF0YS5sZW5ndGg7dCs9M0QxfX1yZXR1cm5bcix0LHVdfTtkLmpxcGxvdC5C
YXJSZW5kZXJlci5wPQpyb3RvdHlwZS5zZXRCYXJXaWR0aD0zRGZ1bmN0aW9uKCl7dmFyIHE7dmFy
IG49M0QwO3ZhciBvPTNEMDt2YXIgdD0zRHRoaXNbdGg9CmlzLl9wcmltYXJ5QXhpc107dmFyIHgs
cix2O3ZhciB3PTNEdGhpcy5fcGxvdFNlcmllc0luZm89M0R0aGlzLnJlbmRlcmVyLmNhbD0KY1Nl
cmllc051bWJlcnMuY2FsbCh0aGlzKTtuPTNEd1swXTtvPTNEd1sxXTt2YXIgdT0zRHQubnVtYmVy
VGlja3M7dmFyIHA9M0QoPQp1LTEpLzI7aWYodC5uYW1lPTNEPTNEInhheGlzInx8dC5uYW1lPTNE
PTNEIngyYXhpcyIpe2lmKHRoaXMuX3N0YWNrKXt0aGlzLmI9CmFyV2lkdGg9M0QodC5fb2Zmc2V0
cy5tYXgtdC5fb2Zmc2V0cy5taW4pL24qby10aGlzLmJhck1hcmdpbn1lbHNle3RoaXMuYmFyVz0K
aWR0aD0zRCgodC5fb2Zmc2V0cy5tYXgtdC5fb2Zmc2V0cy5taW4pL3AtdGhpcy5iYXJQYWRkaW5n
KihvLTEpLXRoaXMuYmFyTWFyPQpnaW4qMikvb319ZWxzZXtpZih0aGlzLl9zdGFjayl7dGhpcy5i
YXJXaWR0aD0zRCh0Ll9vZmZzZXRzLm1pbi10Ll9vZmZzZXRzLm09CmF4KS9uKm8tdGhpcy5iYXJN
YXJnaW59ZWxzZXt0aGlzLmJhcldpZHRoPTNEKCh0Ll9vZmZzZXRzLm1pbi10Ll9vZmZzZXRzLm1h
eD0KKS9wLXRoaXMuYmFyUGFkZGluZyooby0xKS10aGlzLmJhck1hcmdpbioyKS9vfX1yZXR1cm5b
bixvXX07ZnVuY3Rpb24gZihvKXt2PQphciBxPTNEW107Zm9yKHZhciBzPTNEMDtzPG8ubGVuZ3Ro
O3MrKyl7dmFyIHI9M0RkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHM9CihvW3NdKTt2YXIgbj0z
RFtyWzBdLHJbMV0sclsyXV07dmFyIHQ9M0RuWzBdK25bMV0rblsyXTtmb3IodmFyIHA9M0QwO3A8
MztwKz0KKyl7bltwXT0zRCh0PjU3MCk/bltwXSowLjg6bltwXSswLjMqKDI1NS1uW3BdKTtuW3Bd
PTNEcGFyc2VJbnQobltwXSwxMCl9cS5wPQp1c2goInJnYigiK25bMF0rIiwiK25bMV0rIiwiK25b
Ml0rIikiKX1yZXR1cm4gcX1mdW5jdGlvbiBpKHYsdSxzLHQsbyl7dmFyIHE9Cj0zRHYsdz0zRHYt
MSxuLHAscj0zRChvPTNEPTNEPTNEIngiKT8wOjE7aWYocT4wKXtwPTNEdC5zZXJpZXNbd10uX3Bs
b3REYXRhWz0KdV1bcl07aWYoKHMqcCk8MCl7bj0zRGkodyx1LHMsdCxvKX1lbHNle249M0R0LnNl
cmllc1t3XS5ncmlkRGF0YVt1XVtyXX19ZWxzPQple249M0Qocj0zRD0zRD0zRDApP3Quc2VyaWVz
W3FdLl94YXhpcy5zZXJpZXNfdTJwKDApOnQuc2VyaWVzW3FdLl95YXhpcy5zZXI9Cmllc191MnAo
MCl9cmV0dXJuIG59ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9M0RmdW5jdGlv
bihFLEwscSxHKT0Ke3ZhciBJO3ZhciBBPTNEZC5leHRlbmQoe30scSk7dmFyIHc9M0QoQS5zaGFk
b3chPTNEdW5kZWZpbmVkKT9BLnNoYWRvdzp0aGlzPQouc2hhZG93O3ZhciBPPTNEKEEuc2hvd0xp
bmUhPTNEdW5kZWZpbmVkKT9BLnNob3dMaW5lOnRoaXMuc2hvd0xpbmU7dmFyIEY9M0Q9CihBLmZp
bGwhPTNEdW5kZWZpbmVkKT9BLmZpbGw6dGhpcy5maWxsO3ZhciBwPTNEdGhpcy54YXhpczt2YXIg
Sj0zRHRoaXMueWF4aT0Kczt2YXIgeT0zRHRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIEs9M0R0
aGlzLl95YXhpcy5zZXJpZXNfdTJwO3ZhciBELEM7dGhpPQpzLl9kYXRhQ29sb3JzPTNEW107dGhp
cy5fYmFyUG9pbnRzPTNEW107aWYodGhpcy5iYXJXaWR0aD0zRD0zRG51bGwpe3RoaXMucmU9Cm5k
ZXJlci5zZXRCYXJXaWR0aC5jYWxsKHRoaXMpfXZhciBOPTNEdGhpcy5fcGxvdFNlcmllc0luZm89
M0R0aGlzLnJlbmRlcmVyLj0KY2FsY1Nlcmllc051bWJlcnMuY2FsbCh0aGlzKTt2YXIgeD0zRE5b
MF07dmFyIHY9M0ROWzFdO3ZhciBzPTNETlsyXTt2YXIgSD0KPTNEW107aWYodGhpcy5fc3RhY2sp
e3RoaXMuX2Jhck51ZGdlPTNEMH1lbHNle3RoaXMuX2Jhck51ZGdlPTNEKC1NYXRoLmFicyh2PQov
Mi0wLjUpK3MpKih0aGlzLmJhcldpZHRoK3RoaXMuYmFyUGFkZGluZyl9aWYoTyl7dmFyIHU9M0Ru
ZXcgZC5qcXBsb3QuQ29sb3I9CkdlbmVyYXRvcih0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzKTt2
YXIgQj0zRG5ldyBkLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aD0KaXMuc2VyaWVzQ29sb3JzKTt2
YXIgTT0zRHUuZ2V0KHRoaXMuaW5kZXgpO2lmKCF0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKXtNPTNE
PQpBLmZpbGxTdHlsZX12YXIgdD0zREEuZmlsbFN0eWxlO3ZhciByO3ZhciBQO3ZhciBvO2lmKHRo
aXMuYmFyRGlyZWN0aW9uPTNEPQo9M0QidmVydGljYWwiKXtmb3IodmFyIEk9M0QwO0k8TC5sZW5n
dGg7SSsrKXtpZighdGhpcy5fc3RhY2smJnRoaXMuZGF0YVtJXVs9CjFdPTNEPTNEbnVsbCl7Y29u
dGludWV9SD0zRFtdO3I9M0RMW0ldWzBdK3RoaXMuX2Jhck51ZGdlO2lmKHRoaXMuX3N0YWNrJiZ0
aD0KaXMuX3ByZXZHcmlkRGF0YS5sZW5ndGgpe289M0RpKHRoaXMuaW5kZXgsSSx0aGlzLl9wbG90
RGF0YVtJXVsxXSxHLCJ5Iil9ZWxzPQple2lmKHRoaXMuZmlsbFRvWmVybyl7bz0zRHRoaXMuX3lh
eGlzLnNlcmllc191MnAoMCl9ZWxzZXtpZih0aGlzLndhdGVyZmFsbCY9CiZJPjAmJkk8dGhpcy5n
cmlkRGF0YS5sZW5ndGgtMSl7bz0zRHRoaXMuZ3JpZERhdGFbSS0xXVsxXX1lbHNle2lmKHRoaXMu
d2F0ZT0KcmZhbGwmJkk9M0Q9M0QwJiZJPHRoaXMuZ3JpZERhdGEubGVuZ3RoLTEpe2lmKHRoaXMu
X3lheGlzLm1pbjw9M0QwJiZ0aGlzLl95PQpheGlzLm1heD49M0QwKXtvPTNEdGhpcy5feWF4aXMu
c2VyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3lheGlzLm1pbj4wKXtvPQo9M0RFLmNhbnZhcy5o
ZWlnaHR9ZWxzZXtvPTNEMH19fWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9M0Q9M0R0aGlzLmdy
aWREYXQ9CmEubGVuZ3RoLTEpe2lmKHRoaXMuX3lheGlzLm1pbjw9M0QwJiZ0aGlzLl95YXhpcy5t
YXg+PTNEMCl7bz0zRHRoaXMuX3lheGlzLj0Kc2VyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3lh
eGlzLm1pbj4wKXtvPTNERS5jYW52YXMuaGVpZ2h0fWVsc2V7bz0zRDB9fX1lPQpsc2V7bz0zREUu
Y2FudmFzLmhlaWdodH19fX19aWYoKHRoaXMuZmlsbFRvWmVybyYmdGhpcy5fcGxvdERhdGFbSV1b
MV08MCl8fCg9CnRoaXMud2F0ZXJmYWxsJiZ0aGlzLl9kYXRhW0ldWzFdPDApKXtpZih0aGlzLnZh
cnlCYXJDb2xvciYmIXRoaXMuX3N0YWNrKXtpZj0KKHRoaXMudXNlTmVnYXRpdmVDb2xvcnMpe0Eu
ZmlsbFN0eWxlPTNEdS5uZXh0KCl9ZWxzZXtBLmZpbGxTdHlsZT0zREIubmV4dCgpPQp9fWVsc2V7
QS5maWxsU3R5bGU9M0RNfX1lbHNle2lmKHRoaXMudmFyeUJhckNvbG9yJiYhdGhpcy5fc3RhY2sp
e0EuZmlsbFN0eWw9CmU9M0RCLm5leHQoKX1lbHNle0EuZmlsbFN0eWxlPTNEdH19aWYoIXRoaXMu
ZmlsbFRvWmVyb3x8dGhpcy5fcGxvdERhdGFbSV1bMT0KXT49M0QwKXtILnB1c2goW3ItdGhpcy5i
YXJXaWR0aC8yLG9dKTtILnB1c2goW3ItdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKTtIPQoucHVz
aChbcit0aGlzLmJhcldpZHRoLzIsTFtJXVsxXV0pO0gucHVzaChbcit0aGlzLmJhcldpZHRoLzIs
b10pfWVsc2V7SC5wdXM9CmgoW3ItdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKTtILnB1c2goW3It
dGhpcy5iYXJXaWR0aC8yLG9dKTtILnB1c2goW3IrdGhpcz0KLmJhcldpZHRoLzIsb10pO0gucHVz
aChbcit0aGlzLmJhcldpZHRoLzIsTFtJXVsxXV0pfXRoaXMuX2JhclBvaW50cy5wdXNoKEgpPQo7
aWYodyYmIXRoaXMuX3N0YWNrKXt2YXIgej0zRGQuZXh0ZW5kKHRydWUse30sQSk7ZGVsZXRlIHou
ZmlsbFN0eWxlO3RoaXMucmU9Cm5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEUsSCx6KX12YXIg
bj0zREEuZmlsbFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMuX2RhdD0KYUNvbG9ycy5wdXNoKG4pO3Ro
aXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KEUsSCxBKX19ZWxzZXtpZih0aGlzLmJhckRp
PQpyZWN0aW9uPTNEPTNEImhvcml6b250YWwiKXtmb3IodmFyIEk9M0QwO0k8TC5sZW5ndGg7SSsr
KXtpZighdGhpcy5fc3RhY2smJnQ9Cmhpcy5kYXRhW0ldWzBdPTNEPTNEbnVsbCl7Y29udGludWV9
SD0zRFtdO3I9M0RMW0ldWzFdLXRoaXMuX2Jhck51ZGdlO1A7aWYodD0KaGlzLl9zdGFjayYmdGhp
cy5fcHJldkdyaWREYXRhLmxlbmd0aCl7UD0zRGkodGhpcy5pbmRleCxJLHRoaXMuX3Bsb3REYXRh
W0ldPQpbMF0sRywieCIpfWVsc2V7aWYodGhpcy5maWxsVG9aZXJvKXtQPTNEdGhpcy5feGF4aXMu
c2VyaWVzX3UycCgwKX1lbHNle2lmKHQ9Cmhpcy53YXRlcmZhbGwmJkk+MCYmSTx0aGlzLmdyaWRE
YXRhLmxlbmd0aC0xKXtQPTNEdGhpcy5ncmlkRGF0YVtJLTFdWzBdfWVscz0KZXtpZih0aGlzLndh
dGVyZmFsbCYmST0zRD0zRDAmJkk8dGhpcy5ncmlkRGF0YS5sZW5ndGgtMSl7aWYodGhpcy5feGF4
aXMubWluPQo8PTNEMCYmdGhpcy5feGF4aXMubWF4Pj0zRDApe1A9M0R0aGlzLl94YXhpcy5zZXJp
ZXNfdTJwKDApfWVsc2V7aWYodGhpcy5feGE9Cnhpcy5taW4+MCl7UD0zRDB9ZWxzZXtQPTNEMH19
fWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9M0Q9M0R0aGlzLmdyaWREYXRhLj0KbGVuZ3RoLTEp
e2lmKHRoaXMuX3hheGlzLm1pbjw9M0QwJiZ0aGlzLl94YXhpcy5tYXg+PTNEMCl7UD0zRHRoaXMu
X3hheGlzLnNlPQpyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3hheGlzLm1pbj4wKXtQPTNEMH1l
bHNle1A9M0RFLmNhbnZhcy53aWR0aH19fWVsc2U9CntQPTNEMH19fX19aWYoKHRoaXMuZmlsbFRv
WmVybyYmdGhpcy5fcGxvdERhdGFbSV1bMF08MCl8fCh0aGlzLndhdGVyZmFsbCYmdD0KaGlzLl9k
YXRhW0ldWzBdPDApKXtpZih0aGlzLnZhcnlCYXJDb2xvciYmIXRoaXMuX3N0YWNrKXtpZih0aGlz
LnVzZU5lZ2F0aXZlPQpDb2xvcnMpe0EuZmlsbFN0eWxlPTNEdS5uZXh0KCl9ZWxzZXtBLmZpbGxT
dHlsZT0zREIubmV4dCgpfX1lbHNle0EuZmlsbFN0eWw9CmU9M0RNfX1lbHNle2lmKHRoaXMudmFy
eUJhckNvbG9yJiYhdGhpcy5fc3RhY2spe0EuZmlsbFN0eWxlPTNEQi5uZXh0KCl9ZWxzZT0Ke0Eu
ZmlsbFN0eWxlPTNEdH19aWYoIXRoaXMuZmlsbFRvWmVyb3x8dGhpcy5fcGxvdERhdGFbSV1bMF0+
PTNEMCl7SC5wdXNoKFtQPQoscit0aGlzLmJhcldpZHRoLzJdKTtILnB1c2goW1Asci10aGlzLmJh
cldpZHRoLzJdKTtILnB1c2goW0xbSV1bMF0sci10aGlzLmI9CmFyV2lkdGgvMl0pO0gucHVzaChb
TFtJXVswXSxyK3RoaXMuYmFyV2lkdGgvMl0pfWVsc2V7SC5wdXNoKFtMW0ldWzBdLHIrdGhpcz0K
LmJhcldpZHRoLzJdKTtILnB1c2goW0xbSV1bMF0sci10aGlzLmJhcldpZHRoLzJdKTtILnB1c2go
W1Asci10aGlzLmJhcldpZHRoPQovMl0pO0gucHVzaChbUCxyK3RoaXMuYmFyV2lkdGgvMl0pfXRo
aXMuX2JhclBvaW50cy5wdXNoKEgpO2lmKHcmJiF0aGlzLl9zdGE9CmNrKXt2YXIgej0zRGQuZXh0
ZW5kKHRydWUse30sQSk7ZGVsZXRlIHouZmlsbFN0eWxlO3RoaXMucmVuZGVyZXIuc2hhZG93UmVu
ZD0KZXJlci5kcmF3KEUsSCx6KX12YXIgbj0zREEuZmlsbFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMu
X2RhdGFDb2xvcnMucHVzaChuKTt0PQpoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KEUs
SCxBKX19fX1pZih0aGlzLmhpZ2hsaWdodENvbG9ycy5sZW5ndGg9M0Q9Cj0zRDApe3RoaXMuaGln
aGxpZ2h0Q29sb3JzPTNEZC5qcXBsb3QuY29tcHV0ZUhpZ2hsaWdodENvbG9ycyh0aGlzLl9kYXRh
Q29sbz0KcnMpfWVsc2V7aWYodHlwZW9mKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKT0zRD0zRCJzdHJp
bmciKXt2YXIgTj0zRHRoaXMuaGlnaGxpPQpnaHRDb2xvcnM7dGhpcy5oaWdobGlnaHRDb2xvcnM9
M0RbXTtmb3IodmFyIEk9M0QwO0k8dGhpcy5fZGF0YUNvbG9ycy5sZW5ndGg9CjtJKyspe3RoaXMu
aGlnaGxpZ2h0Q29sb3JzLnB1c2goTil9fX19O2QuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlw
ZS5kcmF3Uz0KaGFkb3c9M0RmdW5jdGlvbih6LEcscCxCKXt2YXIgRDt2YXIgdz0zRChwIT0zRHVu
ZGVmaW5lZCk/cDp7fTt2YXIgdD0zRCh3LnNoPQphZG93IT0zRHVuZGVmaW5lZCk/dy5zaGFkb3c6
dGhpcy5zaGFkb3c7dmFyIEk9M0Qody5zaG93TGluZSE9M0R1bmRlZmluZWQpP3c9Ci5zaG93TGlu
ZTp0aGlzLnNob3dMaW5lO3ZhciBBPTNEKHcuZmlsbCE9M0R1bmRlZmluZWQpP3cuZmlsbDp0aGlz
LmZpbGw7dmFyID0Kbz0zRHRoaXMueGF4aXM7dmFyIEU9M0R0aGlzLnlheGlzO3ZhciB2PTNEdGhp
cy5feGF4aXMuc2VyaWVzX3UycDt2YXIgRj0zRHRoPQppcy5feWF4aXMuc2VyaWVzX3UycDt2YXIg
eSxDLHgsdSxzLHI7aWYodGhpcy5fc3RhY2smJnRoaXMuc2hhZG93KXtpZih0aGlzLmI9CmFyV2lk
dGg9M0Q9M0RudWxsKXt0aGlzLnJlbmRlcmVyLnNldEJhcldpZHRoLmNhbGwodGhpcyl9dmFyIEg9
M0R0aGlzLl9wbG90Uz0KZXJpZXNJbmZvPTNEdGhpcy5yZW5kZXJlci5jYWxjU2VyaWVzTnVtYmVy
cy5jYWxsKHRoaXMpO3U9M0RIWzBdO3M9M0RIWzFdO3I9Cj0zREhbMl07aWYodGhpcy5fc3RhY2sp
e3RoaXMuX2Jhck51ZGdlPTNEMH1lbHNle3RoaXMuX2Jhck51ZGdlPTNEKC1NYXRoLmFicz0KKHMv
Mi0wLjUpK3IpKih0aGlzLmJhcldpZHRoK3RoaXMuYmFyUGFkZGluZyl9aWYoSSl7aWYodGhpcy5i
YXJEaXJlY3Rpb249M0Q9Cj0zRCJ2ZXJ0aWNhbCIpe2Zvcih2YXIgRD0zRDA7RDxHLmxlbmd0aDtE
Kyspe2lmKHRoaXMuZGF0YVtEXVsxXT0zRD0zRG51bGwpez0KY29udGludWV9Qz0zRFtdO3ZhciBx
PTNER1tEXVswXSt0aGlzLl9iYXJOdWRnZTt2YXIgbjtpZih0aGlzLl9zdGFjayYmdGhpcy5fPQpw
cmV2R3JpZERhdGEubGVuZ3RoKXtuPTNEaSh0aGlzLmluZGV4LEQsdGhpcy5fcGxvdERhdGFbRF1b
MV0sQiwieSIpfWVsc2V7aWY9Cih0aGlzLmZpbGxUb1plcm8pe249M0R0aGlzLl95YXhpcy5zZXJp
ZXNfdTJwKDApfWVsc2V7bj0zRHouY2FudmFzLmhlaWdodH19Qz0KLnB1c2goW3EtdGhpcy5iYXJX
aWR0aC8yLG5dKTtDLnB1c2goW3EtdGhpcy5iYXJXaWR0aC8yLEdbRF1bMV1dKTtDLnB1c2goW3Er
PQp0aGlzLmJhcldpZHRoLzIsR1tEXVsxXV0pO0MucHVzaChbcSt0aGlzLmJhcldpZHRoLzIsbl0p
O3RoaXMucmVuZGVyZXIuc2hhZG89CndSZW5kZXJlci5kcmF3KHosQyx3KX19ZWxzZXtpZih0aGlz
LmJhckRpcmVjdGlvbj0zRD0zRCJob3Jpem9udGFsIil7Zm9yKHZhcj0KIEQ9M0QwO0Q8Ry5sZW5n
dGg7RCsrKXtpZih0aGlzLmRhdGFbRF1bMF09M0Q9M0RudWxsKXtjb250aW51ZX1DPTNEW107dmFy
IHE9Cj0zREdbRF1bMV0tdGhpcy5fYmFyTnVkZ2U7dmFyIEo7aWYodGhpcy5fc3RhY2smJnRoaXMu
X3ByZXZHcmlkRGF0YS5sZW5ndGgpez0KSj0zRGkodGhpcy5pbmRleCxELHRoaXMuX3Bsb3REYXRh
W0RdWzBdLEIsIngiKX1lbHNle2lmKHRoaXMuZmlsbFRvWmVybyl7Sj0KPTNEdGhpcy5feGF4aXMu
c2VyaWVzX3UycCgwKX1lbHNle0o9M0QwfX1DLnB1c2goW0oscSt0aGlzLmJhcldpZHRoLzJdKTtD
LnB1PQpzaChbR1tEXVswXSxxK3RoaXMuYmFyV2lkdGgvMl0pO0MucHVzaChbR1tEXVswXSxxLXRo
aXMuYmFyV2lkdGgvMl0pO0MucHVzaCg9CltKLHEtdGhpcy5iYXJXaWR0aC8yXSk7dGhpcy5yZW5k
ZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KHosQyx3KX19fX19fTtmdW5jdD0KaW9uIGgocSxwLG4p
e2Zvcih2YXIgbz0zRDA7bzx0aGlzLnNlcmllcy5sZW5ndGg7bysrKXtpZih0aGlzLnNlcmllc1tv
XS5yZW5kPQplcmVyLmNvbnN0cnVjdG9yPTNEPTNEZC5qcXBsb3QuQmFyUmVuZGVyZXIpe2lmKHRo
aXMuc2VyaWVzW29dLmhpZ2hsaWdodE1vdXM9CmVPdmVyKXt0aGlzLnNlcmllc1tvXS5oaWdobGln
aHRNb3VzZURvd249M0RmYWxzZX19fX1mdW5jdGlvbiBqKCl7aWYodGhpcy5wbD0KdWdpbnMuYmFy
UmVuZGVyZXImJnRoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpe3RoaXMu
cGx1Z2lucy5iPQphclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpO3RoaXMu
cGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHQ9CkNhbnZhcz0zRG51bGx9dGhpcy5wbHVnaW5z
LmJhclJlbmRlcmVyPTNEe2hpZ2hsaWdodGVkU2VyaWVzSW5kZXg6bnVsbH07dGhpcz0KLnBsdWdp
bnMuYmFyUmVuZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPTNEbmV3IGQuanFwbG90LkdlbmVyaWNDYW52
YXMoKTt0aGlzLmV2PQplbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5iYXJSZW5k
ZXJlci5oaWdobGlnaHRDYW52YXMuY3JlYXRlRWxlbWU9Cm50KHRoaXMuX2dyaWRQYWRkaW5nLCJq
cXBsb3QtYmFyUmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVucz0KaW9u
cyx0aGlzKSk7dGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250
ZXh0KCk7dGhpcy5ldmVuPQp0Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtwbG90OnRo
aXN9LGZ1bmN0aW9uKG4pe2sobi5kYXRhLnBsb3QpfSl9ZnU9Cm5jdGlvbiBjKHUsdCxxLHApe3Zh
ciBvPTNEdS5zZXJpZXNbdF07dmFyIG49M0R1LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZz0K
aHRDYW52YXM7bi5fY3R4LmNsZWFyUmVjdCgwLDAsbi5fY3R4LmNhbnZhcy53aWR0aCxuLl9jdHgu
Y2FudmFzLmhlaWdodCk7by5fPQpoaWdobGlnaHRlZFBvaW50PTNEcTt1LnBsdWdpbnMuYmFyUmVu
ZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD0zRHQ7dmFyIHI9Cj0zRHtmaWxsU3R5bGU6by5o
aWdobGlnaHRDb2xvcnNbcV19O28ucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KG4uX2N0eCxw
LD0Kcik7bj0zRG51bGx9ZnVuY3Rpb24gayhwKXt2YXIgbj0zRHAucGx1Z2lucy5iYXJSZW5kZXJl
ci5oaWdobGlnaHRDYW52YXM7bi5fPQpjdHguY2xlYXJSZWN0KDAsMCxuLl9jdHguY2FudmFzLndp
ZHRoLG4uX2N0eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIG89M0QwO289CjxwLnNlcmllcy5sZW5n
dGg7bysrKXtwLnNlcmllc1tvXS5faGlnaGxpZ2h0ZWRQb2ludD0zRG51bGx9cC5wbHVnaW5zLmJh
clJlbj0KZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD0zRG51bGw7cC50YXJnZXQudHJpZ2dl
cigianFwbG90RGF0YVVuaGlnaGxpZ2h0PQoiKTtuPTNEbnVsbH1mdW5jdGlvbiBiKHIscSx1LHQs
cyl7aWYodCl7dmFyIHA9M0RbdC5zZXJpZXNJbmRleCx0LnBvaW50SW5kZXg9Cix0LmRhdGFdO3Zh
ciBvPTNEalF1ZXJ5LkV2ZW50KCJqcXBsb3REYXRhTW91c2VPdmVyIik7by5wYWdlWD0zRHIucGFn
ZVg7by5wYT0KZ2VZPTNEci5wYWdlWTtzLnRhcmdldC50cmlnZ2VyKG8scCk7aWYocy5zZXJpZXNb
cFswXV0uc2hvdyYmcy5zZXJpZXNbcFswXV0uPQpoaWdobGlnaHRNb3VzZU92ZXImJiEocFswXT0z
RD0zRHMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGU9CngmJnBbMV09
M0Q9M0RzLnNlcmllc1twWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciBuPTNEalF1ZXJ5LkV2
ZW50KCJqcXBsbz0KdERhdGFIaWdobGlnaHQiKTtuLndoaWNoPTNEci53aGljaDtuLnBhZ2VYPTNE
ci5wYWdlWDtuLnBhZ2VZPTNEci5wYWdlWTtzLnRhPQpyZ2V0LnRyaWdnZXIobixwKTtjKHMsdC5z
ZXJpZXNJbmRleCx0LnBvaW50SW5kZXgsdC5wb2ludHMpfX1lbHNle2lmKHQ9M0Q9M0Q9Cm51bGwp
e2socyl9fX1mdW5jdGlvbiBhKHEscCx0LHMscil7aWYocyl7dmFyIG89M0Rbcy5zZXJpZXNJbmRl
eCxzLnBvaW50SW5kZT0KeCxzLmRhdGFdO2lmKHIuc2VyaWVzW29bMF1dLmhpZ2hsaWdodE1vdXNl
RG93biYmIShvWzBdPTNEPTNEci5wbHVnaW5zLmJhclJlPQpuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJp
ZXNJbmRleCYmb1sxXT0zRD0zRHIuc2VyaWVzW29bMF1dLl9oaWdobGlnaHRlZFBvaW50KSk9Cnt2
YXIgbj0zRGpRdWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO24ud2hpY2g9M0RxLndo
aWNoO24ucGFnZVg9M0RxLj0KcGFnZVg7bi5wYWdlWT0zRHEucGFnZVk7ci50YXJnZXQudHJpZ2dl
cihuLG8pO2MocixzLnNlcmllc0luZGV4LHMucG9pbnRJbmRlPQp4LHMucG9pbnRzKX19ZWxzZXtp
ZihzPTNEPTNEbnVsbCl7ayhyKX19fWZ1bmN0aW9uIGwocCxvLHMscixxKXt2YXIgbj0zRHEucGw9
CnVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYobiE9M0RudWxsJiZx
LnNlcmllc1tuXS5oaWdobGlnaD0KdE1vdXNlRG93bil7ayhxKX19ZnVuY3Rpb24gZShxLHAsdCxz
LHIpe2lmKHMpe3ZhciBvPTNEW3Muc2VyaWVzSW5kZXgscy5wb2luPQp0SW5kZXgscy5kYXRhXTt2
YXIgbj0zRGpRdWVyeS5FdmVudCgianFwbG90RGF0YUNsaWNrIik7bi53aGljaD0zRHEud2hpY2g7
bi49CnBhZ2VYPTNEcS5wYWdlWDtuLnBhZ2VZPTNEcS5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKG4s
byl9fWZ1bmN0aW9uIG0ocixxLHUsdD0KLHMpe2lmKHQpe3ZhciBwPTNEW3Quc2VyaWVzSW5kZXgs
dC5wb2ludEluZGV4LHQuZGF0YV07dmFyIG49M0RzLnBsdWdpbnMuYmFyPQpSZW5kZXJlci5oaWdo
bGlnaHRlZFNlcmllc0luZGV4O2lmKG4hPTNEbnVsbCYmcy5zZXJpZXNbbl0uaGlnaGxpZ2h0TW91
c2VEb3c9Cm4pe2socyl9dmFyIG89M0RqUXVlcnkuRXZlbnQoImpxcGxvdERhdGFSaWdodENsaWNr
Iik7by53aGljaD0zRHIud2hpY2g7by5wYT0KZ2VYPTNEci5wYWdlWDtvLnBhZ2VZPTNEci5wYWdl
WTtzLnRhcmdldC50cmlnZ2VyKG8scCl9fX0pKGpRdWVyeSk7LyoganFQbG90PQogMS4wLjhyMTI1
MCB8IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8gfCBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8
IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihhKXthLmpxcGxvdC5C
bG9ja1JlbmRlcmVyPTNEZnVuY3Rpb24oKXthLmpxcGxvdC5MaW5lUmVuZGVyZXIuPQpjYWxsKHRo
aXMpfTthLmpxcGxvdC5CbG9ja1JlbmRlcmVyLnByb3RvdHlwZT0zRG5ldyBhLmpxcGxvdC5MaW5l
UmVuZGVyZXIoKTs9CmEuanFwbG90LkJsb2NrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9y
PTNEYS5qcXBsb3QuQmxvY2tSZW5kZXJlcjthLmpxcD0KbG90LkJsb2NrUmVuZGVyZXIucHJvdG90
eXBlLmluaXQ9M0RmdW5jdGlvbihiKXt0aGlzLmNzcz0zRHtwYWRkaW5nOiIycHgiLGJvPQpyZGVy
OiIxcHggc29saWQgIzk5OSIsdGV4dEFsaWduOiJjZW50ZXIifTt0aGlzLmVzY2FwZUh0bWw9M0Rm
YWxzZTt0aGlzLmluc2U9CnJ0QnJlYWtzPTNEdHJ1ZTt0aGlzLnZhcnlCbG9ja0NvbG9ycz0zRGZh
bHNlO2EuZXh0ZW5kKHRydWUsdGhpcyxiKTtpZih0aGlzLj0KY3NzLmJhY2tncm91bmRDb2xvcil7
dGhpcy5jb2xvcj0zRHRoaXMuY3NzLmJhY2tncm91bmRDb2xvcn1lbHNle2lmKHRoaXMuY3NzPQou
YmFja2dyb3VuZCl7dGhpcy5jb2xvcj0zRHRoaXMuY3NzLmJhY2tncm91bmR9ZWxzZXtpZighdGhp
cy52YXJ5QmxvY2tDb2xvcnM9Cil7dGhpcy5jc3MuYmFja2dyb3VuZD0zRHRoaXMuY29sb3J9fX10
aGlzLmNhbnZhcz0zRG5ldyBhLmpxcGxvdC5CbG9ja0NhbnZhcz0KKCk7dGhpcy5zaGFkb3dDYW52
YXM9M0RuZXcgYS5qcXBsb3QuQmxvY2tDYW52YXMoKTt0aGlzLmNhbnZhcy5fcGxvdERpbWVuc2lv
PQpucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuc2hhZG93Q2FudmFzLl9wbG90RGltZW5z
aW9ucz0zRHRoaXMuX3Bsb3REaW09CmVuc2lvbnM7dGhpcy5fdHlwZT0zRCJibG9jayI7dGhpcy5t
b3ZlQmxvY2s9M0RmdW5jdGlvbihsLGosaSxlKXt2YXIgYz0zRHRoaT0Kcy5jYW52YXMuX2VsZW0u
Y2hpbGRyZW4oIjplcSgiK2wrIikiKTt0aGlzLmRhdGFbbF1bMF09M0RqO3RoaXMuZGF0YVtsXVsx
XT0KPTNEaTt0aGlzLl9wbG90RGF0YVtsXVswXT0zRGo7dGhpcy5fcGxvdERhdGFbbF1bMV09M0Rp
O3RoaXMuX3N0YWNrRGF0YVtsXVswPQpdPTNEajt0aGlzLl9zdGFja0RhdGFbbF1bMV09M0RpO3Ro
aXMuZ3JpZERhdGFbbF1bMF09M0R0aGlzLl94YXhpcy5zZXJpZXNfdTI9CnAoaik7dGhpcy5ncmlk
RGF0YVtsXVsxXT0zRHRoaXMuX3lheGlzLnNlcmllc191MnAoaSk7dmFyIGs9M0RjLm91dGVyV2lk
dGgoKT0KO3ZhciBmPTNEYy5vdXRlckhlaWdodCgpO3ZhciBkPTNEdGhpcy5ncmlkRGF0YVtsXVsw
XS1rLzIrInB4Ijt2YXIgZz0zRHRoaXMuPQpncmlkRGF0YVtsXVsxXS1mLzIrInB4IjtpZihlKXtp
ZihwYXJzZUludChlLDEwKSl7ZT0zRHBhcnNlSW50KGUsMTApfWMuYW5pbWE9CnRlKHtsZWZ0OmQs
dG9wOmd9LGUpfWVsc2V7Yy5jc3Moe2xlZnQ6ZCx0b3A6Z30pfWM9M0RudWxsfX07YS5qcXBsb3Qu
QmxvY2tSZT0KbmRlcmVyLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24ocSxvLHIpe2lmKHRoaXMu
cGx1Z2lucy5wb2ludExhYmVscyl7dGhpcy5wPQpsdWdpbnMucG9pbnRMYWJlbHMuc2hvdz0zRGZh
bHNlfXZhciBmLGMsbCxvLHAsayxuLGcsZSxtO3ZhciBiPTNEKHIhPTNEdW5kZWY9CmluZWQpP3I6
e307dmFyIGo9M0RuZXcgYS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xvcnMp
O3RoaXMuY2Fudj0KYXMuX2VsZW0uZW1wdHkoKTtmb3IoZj0zRDA7Zjx0aGlzLmdyaWREYXRhLmxl
bmd0aDtmKyspe2w9M0R0aGlzLmRhdGFbZl07bz0KPTNEdGhpcy5ncmlkRGF0YVtmXTtwPTNEIiI7
az0zRHt9O2lmKHR5cGVvZiBsWzJdPTNEPTNEInN0cmluZyIpe3A9M0RsWzJdfWVsPQpzZXtpZih0
eXBlb2YgbFsyXT0zRD0zRCJvYmplY3QiKXtrPTNEbFsyXX19aWYodHlwZW9mIGxbM109M0Q9M0Qi
b2JqZWN0Iil7az0KPTNEbFszXX1pZih0aGlzLmluc2VydEJyZWFrcyl7cD0zRHAucmVwbGFjZSgv
IC9nLCI8YnIgLz4iKX1rPTNEYS5leHRlbmQodHJ1PQplLHt9LHRoaXMuY3NzLGspO2M9M0RhKCc8
ZGl2IHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OmF1dG87bWE9CnJnaW4t
cmlnaHQ6YXV0bzsiPjwvZGl2PicpO3RoaXMuY2FudmFzLl9lbGVtLmFwcGVuZChjKTt0aGlzLmVz
Y2FwZUh0bWw/Yy50ZT0KeHQocCk6Yy5odG1sKHApO2RlbGV0ZSBrLnBvc2l0aW9uO2RlbGV0ZSBr
Lm1hcmdpblJpZ2h0O2RlbGV0ZSBrLm1hcmdpbkxlZnQ7PQppZighay5iYWNrZ3JvdW5kJiYhay5i
YWNrZ3JvdW5kQ29sb3ImJiFrLmJhY2tncm91bmRJbWFnZSl7ay5iYWNrZ3JvdW5kPTNEai49Cm5l
eHQoKX1jLmNzcyhrKTtuPTNEYy5vdXRlcldpZHRoKCk7Zz0zRGMub3V0ZXJIZWlnaHQoKTtlPTNE
b1swXS1uLzIrInB4IjttPQo9M0RvWzFdLWcvMisicHgiO2MuY3NzKHtsZWZ0OmUsdG9wOm19KTtj
PTNEbnVsbH19O2EuanFwbG90LkJsb2NrQ2FudmFzPTNEZnU9Cm5jdGlvbigpe2EuanFwbG90LkVs
ZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O2EuanFwbG90LkJsb2NrQ2FudmFzLj0K
cHJvdG90eXBlPTNEbmV3IGEuanFwbG90LkVsZW1Db250YWluZXIoKTthLmpxcGxvdC5CbG9ja0Nh
bnZhcy5wcm90b3R5cGUuY29uPQpzdHJ1Y3Rvcj0zRGEuanFwbG90LkJsb2NrQ2FudmFzO2EuanFw
bG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5jcmVhdGVFbGVtZW49CnQ9M0RmdW5jdGlvbihpLGUs
Yyl7dGhpcy5fb2Zmc2V0cz0zRGk7dmFyIGI9M0QianFwbG90LWJsb2NrQ2FudmFzIjtpZihlIT0z
RD0KdW5kZWZpbmVkKXtiPTNEZX12YXIgZztpZih0aGlzLl9lbGVtKXtnPTNEdGhpcy5fZWxlbS5n
ZXQoMCl9ZWxzZXtnPTNEZG9jdW1lPQpudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1pZihjIT0zRHVu
ZGVmaW5lZCl7dGhpcy5fcGxvdERpbWVuc2lvbnM9M0RjfXZhciBkPQo9M0R0aGlzLl9wbG90RGlt
ZW5zaW9ucy53aWR0aC10aGlzLl9vZmZzZXRzLmxlZnQtdGhpcy5fb2Zmc2V0cy5yaWdodCsicHgi
O3Y9CmFyIGY9M0R0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtdGhpcy5fb2Zmc2V0cy50b3At
dGhpcy5fb2Zmc2V0cy5ib3R0b20rIj0KcHgiO3RoaXMuX2VsZW09M0RhKGcpO3RoaXMuX2VsZW0u
Y3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOmQsaGVpZ2h0OmYsPQpsZWZ0OnRoaXMuX29m
ZnNldHMubGVmdCx0b3A6dGhpcy5fb2Zmc2V0cy50b3B9KTt0aGlzLl9lbGVtLmFkZENsYXNzKGIp
O3JldHU9CnJuIHRoaXMuX2VsZW19O2EuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5zZXRD
b250ZXh0PTNEZnVuY3Rpb24oKXt0aGlzLj0KX2N0eD0zRHtjYW52YXM6e3dpZHRoOjAsaGVpZ2h0
OjB9LGNsZWFyUmVjdDpmdW5jdGlvbigpe3JldHVybiBudWxsfX07cmV0dXJuPQogdGhpcy5fY3R4
fX0pKGpRdWVyeSk7LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExl
b25lbGxvIHw9CiBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVv
bmVsbG8KKyAqLyhmdW5jdGlvbihhKXthLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlcj0z
RGZ1bmN0aW9uKGIpe3RoaXMuYW5nbGU9Cj0zRDA7dGhpcy5heGlzO3RoaXMuc2hvdz0zRHRydWU7
dGhpcy5zaG93TGFiZWw9M0R0cnVlO3RoaXMubGFiZWw9M0QiIjt0aGlzLj0KZm9udEZhbWlseT0z
RCciVHJlYnVjaGV0IE1TIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZic7dGhpcy5mb250
U2l6ZT0KPTNEIjExcHQiO3RoaXMuZm9udFdlaWdodD0zRCJub3JtYWwiO3RoaXMuZm9udFN0cmV0
Y2g9M0QxO3RoaXMudGV4dENvbG9yPTNEPQoiIzY2NjY2NiI7dGhpcy5lbmFibGVGb250U3VwcG9y
dD0zRHRydWU7dGhpcy5wdDJweD0zRG51bGw7dGhpcy5fZWxlbTt0aGlzLl89CmN0eDt0aGlzLl9w
bG90V2lkdGg7dGhpcy5fcGxvdEhlaWdodDt0aGlzLl9wbG90RGltZW5zaW9ucz0zRHtoZWlnaHQ6
bnVsbCx3aT0KZHRoOm51bGx9O2EuZXh0ZW5kKHRydWUsdGhpcyxiKTtpZihiLmFuZ2xlPTNEPTNE
bnVsbCYmdGhpcy5heGlzIT0zRCJ4YXhpcyImPQomdGhpcy5heGlzIT0zRCJ4MmF4aXMiKXt0aGlz
LmFuZ2xlPTNELTkwfXZhciBjPTNEe2ZvbnRTaXplOnRoaXMuZm9udFNpemUsZm89Cm50V2VpZ2h0
OnRoaXMuZm9udFdlaWdodCxmb250U3RyZXRjaDp0aGlzLmZvbnRTdHJldGNoLGZpbGxTdHlsZTp0
aGlzLnRleHRDbz0KbG9yLGFuZ2xlOnRoaXMuZ2V0QW5nbGVSYWQoKSxmb250RmFtaWx5OnRoaXMu
Zm9udEZhbWlseX07aWYodGhpcy5wdDJweCl7Yy5wPQp0MnB4PTNEdGhpcy5wdDJweH1pZih0aGlz
LmVuYWJsZUZvbnRTdXBwb3J0KXtpZihhLmpxcGxvdC5zdXBwb3J0X2NhbnZhc190ZXg9CnQoKSl7
dGhpcy5fdGV4dFJlbmRlcmVyPTNEbmV3IGEuanFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlcihjKX1l
bHNle3RoaXMuX3RleD0KdFJlbmRlcmVyPTNEbmV3IGEuanFwbG90LkNhbnZhc1RleHRSZW5kZXJl
cihjKX19ZWxzZXt0aGlzLl90ZXh0UmVuZGVyZXI9M0RuPQpldyBhLmpxcGxvdC5DYW52YXNUZXh0
UmVuZGVyZXIoYyl9fTthLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlci5wcm90b3Q9Cnlw
ZS5pbml0PTNEZnVuY3Rpb24oYil7YS5leHRlbmQodHJ1ZSx0aGlzLGIpO3RoaXMuX3RleHRSZW5k
ZXJlci5pbml0KHtmb250Uz0KaXplOnRoaXMuZm9udFNpemUsZm9udFdlaWdodDp0aGlzLmZvbnRX
ZWlnaHQsZm9udFN0cmV0Y2g6dGhpcy5mb250U3RyZXRjaCxmPQppbGxTdHlsZTp0aGlzLnRleHRD
b2xvcixhbmdsZTp0aGlzLmdldEFuZ2xlUmFkKCksZm9udEZhbWlseTp0aGlzLmZvbnRGYW1pbHk9
Cn0pfTthLmpxcGxvdC5DYW52YXNBeGlzTGFiZWxSZW5kZXJlci5wcm90b3R5cGUuZ2V0V2lkdGg9
M0RmdW5jdGlvbihkKXtpZih0aD0KaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtLm91dGVyV2lk
dGgodHJ1ZSl9ZWxzZXt2YXIgZj0zRHRoaXMuX3RleHRSZW5kZXJlPQpyO3ZhciBjPTNEZi5nZXRX
aWR0aChkKTt2YXIgZT0zRGYuZ2V0SGVpZ2h0KGQpO3ZhciBiPTNETWF0aC5hYnMoTWF0aC5zaW4o
Zi49CmFuZ2xlKSplKStNYXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSpjKTtyZXR1cm4gYn19O2Eu
anFwbG90LkNhbnZhc0F4aXNMYWJlbD0KUmVuZGVyZXIucHJvdG90eXBlLmdldEhlaWdodD0zRGZ1
bmN0aW9uKGQpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlzLl9lbGVtPQoub3V0ZXJIZWlnaHQo
dHJ1ZSl9ZWxzZXt2YXIgZj0zRHRoaXMuX3RleHRSZW5kZXJlcjt2YXIgYz0zRGYuZ2V0V2lkdGgo
ZCk7dmE9CnIgZT0zRGYuZ2V0SGVpZ2h0KGQpO3ZhciBiPTNETWF0aC5hYnMoTWF0aC5jb3MoZi5h
bmdsZSkqZSkrTWF0aC5hYnMoTWF0aC5zaT0KbihmLmFuZ2xlKSpjKTtyZXR1cm4gYn19O2EuanFw
bG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRBbmdsPQplUmFkPTNEZnVu
Y3Rpb24oKXt2YXIgYj0zRHRoaXMuYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIGJ9O2EuanFwbG90
LkNhbnZhc0E9Cnhpc0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9M0RmdW5jdGlvbihjLGYp
e2lmKHRoaXMuX2VsZW0pe2lmKGEuanFwbG90Lj0KdXNlX2V4Y2FudmFzJiZ3aW5kb3cuR192bWxD
YW52YXNNYW5hZ2VyLnVuaW5pdEVsZW1lbnQhPTNEPTNEdW5kZWZpbmVkKXt3aW5kPQpvdy5HX3Zt
bENhbnZhc01hbmFnZXIudW5pbml0RWxlbWVudCh0aGlzLl9lbGVtLmdldCgwKSl9dGhpcy5fZWxl
bS5lbXB0eUZvcmM9CmUoKTt0aGlzLl9lbGVtPTNEbnVsbH12YXIgZT0zRGYuY2FudmFzTWFuYWdl
ci5nZXRDYW52YXMoKTt0aGlzLl90ZXh0UmVuZGVyZT0Kci5zZXRUZXh0KHRoaXMubGFiZWwsYyk7
dmFyIGI9M0R0aGlzLmdldFdpZHRoKGMpO3ZhciBkPTNEdGhpcy5nZXRIZWlnaHQoYyk7PQplLndp
ZHRoPTNEYjtlLmhlaWdodD0zRGQ7ZS5zdHlsZS53aWR0aD0zRGI7ZS5zdHlsZS5oZWlnaHQ9M0Rk
O2U9M0RmLmNhbnZhc009CmFuYWdlci5pbml0Q2FudmFzKGUpO3RoaXMuX2VsZW09M0RhKGUpO3Ro
aXMuX2VsZW0uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifT0KKTt0aGlzLl9lbGVtLmFkZENsYXNz
KCJqcXBsb3QtIit0aGlzLmF4aXMrIi1sYWJlbCIpO2U9M0RudWxsO3JldHVybiB0aGlzLl9lPQps
ZW19O2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5wYWNrPTNEZnVu
Y3Rpb24oKXt0aGlzLl90ZXg9CnRSZW5kZXJlci5kcmF3KHRoaXMuX2VsZW0uZ2V0KDApLmdldENv
bnRleHQoIjJkIiksdGhpcy5sYWJlbCl9fSkoalF1ZXJ5KTsvKj0KIGpxUGxvdCAxLjAuOHIxMjUw
IHwgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbyB8IGpwbG90LmNvbQorICAganNEYXRlIHwg
KGMpIDIwMTAtMjAxMyBDaHJpcyBMZW9uZWxsbworICovKGZ1bmN0aW9uKGEpe2EuanFwbG90LkNh
bnZhc0F4aXNUaWNrUmVuZGVyZXI9M0RmdW5jdGlvbihiKXt0aGlzLm1hcms9M0Q9CiJvdXRzaWRl
Ijt0aGlzLnNob3dNYXJrPTNEdHJ1ZTt0aGlzLnNob3dHcmlkbGluZT0zRHRydWU7dGhpcy5pc01p
bm9yVGljaz0zRD0KZmFsc2U7dGhpcy5hbmdsZT0zRDA7dGhpcy5tYXJrU2l6ZT0zRDQ7dGhpcy5z
aG93PTNEdHJ1ZTt0aGlzLnNob3dMYWJlbD0zRHRyPQp1ZTt0aGlzLmxhYmVsUG9zaXRpb249M0Qi
YXV0byI7dGhpcy5sYWJlbD0zRCIiO3RoaXMudmFsdWU9M0RudWxsO3RoaXMuX3N0eWw9CmVzPTNE
e307dGhpcy5mb3JtYXR0ZXI9M0RhLmpxcGxvdC5EZWZhdWx0VGlja0Zvcm1hdHRlcjt0aGlzLmZv
cm1hdFN0cmluZz0zRD0KIiI7dGhpcy5wcmVmaXg9M0QiIjt0aGlzLmZvbnRGYW1pbHk9M0QnIlRy
ZWJ1Y2hldCBNUyIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhPQpucy1zZXJpZic7dGhpcy5mb250U2l6
ZT0zRCIxMHB0Ijt0aGlzLmZvbnRXZWlnaHQ9M0Qibm9ybWFsIjt0aGlzLmZvbnRTdHJldGM9Cmg9
M0QxO3RoaXMudGV4dENvbG9yPTNEIiM2NjY2NjYiO3RoaXMuZW5hYmxlRm9udFN1cHBvcnQ9M0R0
cnVlO3RoaXMucHQycHg9Cj0zRG51bGw7dGhpcy5fZWxlbTt0aGlzLl9jdHg7dGhpcy5fcGxvdFdp
ZHRoO3RoaXMuX3Bsb3RIZWlnaHQ7dGhpcy5fcGxvdERpbT0KZW5zaW9ucz0zRHtoZWlnaHQ6bnVs
bCx3aWR0aDpudWxsfTthLmV4dGVuZCh0cnVlLHRoaXMsYik7dmFyIGM9M0R7Zm9udFNpemU6PQp0
aGlzLmZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTdHJldGNoOnRoaXMu
Zm9udFN0cmV0Y2gsZmlsbFM9CnR5bGU6dGhpcy50ZXh0Q29sb3IsYW5nbGU6dGhpcy5nZXRBbmds
ZVJhZCgpLGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fTtpZj0KKHRoaXMucHQycHgpe2MucHQy
cHg9M0R0aGlzLnB0MnB4fWlmKHRoaXMuZW5hYmxlRm9udFN1cHBvcnQpe2lmKGEuanFwbG90LnN1
PQpwcG9ydF9jYW52YXNfdGV4dCgpKXt0aGlzLl90ZXh0UmVuZGVyZXI9M0RuZXcgYS5qcXBsb3Qu
Q2FudmFzRm9udFJlbmRlcmVyKGM9Cil9ZWxzZXt0aGlzLl90ZXh0UmVuZGVyZXI9M0RuZXcgYS5q
cXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKGMpfX1lbHNle3RoaXMuXz0KdGV4dFJlbmRlcmVyPTNE
bmV3IGEuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihjKX19O2EuanFwbG90LkNhbnZhc0F4aXNU
aWNrPQpSZW5kZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKGIpe2EuZXh0ZW5kKHRydWUs
dGhpcyxiKTt0aGlzLl90ZXh0UmVuZGU9CnJlci5pbml0KHtmb250U2l6ZTp0aGlzLmZvbnRTaXpl
LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTdHJldGNoOnRoaT0Kcy5mb250U3RyZXRj
aCxmaWxsU3R5bGU6dGhpcy50ZXh0Q29sb3IsYW5nbGU6dGhpcy5nZXRBbmdsZVJhZCgpLGZvbnRG
YW1pbHk6PQp0aGlzLmZvbnRGYW1pbHl9KX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJl
ci5wcm90b3R5cGUuZ2V0V2lkdGg9M0RmdW49CmN0aW9uKGQpe2lmKHRoaXMuX2VsZW0pe3JldHVy
biB0aGlzLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSl9ZWxzZXt2YXIgZj0zRHRoaT0Kcy5fdGV4dFJl
bmRlcmVyO3ZhciBjPTNEZi5nZXRXaWR0aChkKTt2YXIgZT0zRGYuZ2V0SGVpZ2h0KGQpO3ZhciBi
PTNETWF0aC5hPQpicyhNYXRoLnNpbihmLmFuZ2xlKSplKStNYXRoLmFicyhNYXRoLmNvcyhmLmFu
Z2xlKSpjKTtyZXR1cm4gYn19O2EuanFwbG90LkM9CmFudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90
b3R5cGUuZ2V0SGVpZ2h0PTNEZnVuY3Rpb24oZCl7aWYodGhpcy5fZWxlbSl7cmV0dT0Kcm4gdGhp
cy5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1lbHNle3ZhciBmPTNEdGhpcy5fdGV4dFJlbmRlcmVy
O3ZhciBjPTNEZi5nPQpldFdpZHRoKGQpO3ZhciBlPTNEZi5nZXRIZWlnaHQoZCk7dmFyIGI9M0RN
YXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSplKStNYXQ9CmguYWJzKE1hdGguc2luKGYuYW5nbGUp
KmMpO3JldHVybiBifX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlci5wcm90bz0KdHlw
ZS5nZXRUb3A9M0RmdW5jdGlvbihiKXtpZih0aGlzLl9lbGVtKXtyZXR1cm4gdGhpcy5fZWxlbS5w
b3NpdGlvbigpLnRvcH1lPQpsc2V7cmV0dXJuIG51bGx9fTthLmpxcGxvdC5DYW52YXNBeGlzVGlj
a1JlbmRlcmVyLnByb3RvdHlwZS5nZXRBbmdsZVJhZD0zRGY9CnVuY3Rpb24oKXt2YXIgYj0zRHRo
aXMuYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIGJ9O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUj0K
ZW5kZXJlci5wcm90b3R5cGUuc2V0VGljaz0zRGZ1bmN0aW9uKGIsZCxjKXt0aGlzLnZhbHVlPTNE
YjtpZihjKXt0aGlzLmlzTWluPQpvclRpY2s9M0R0cnVlfXJldHVybiB0aGlzfTthLmpxcGxvdC5D
YW52YXNBeGlzVGlja1JlbmRlcmVyLnByb3RvdHlwZS5kcmF3PQo9M0RmdW5jdGlvbihjLGYpe2lm
KCF0aGlzLmxhYmVsKXt0aGlzLmxhYmVsPTNEdGhpcy5wcmVmaXgrdGhpcy5mb3JtYXR0ZXIodGg9
CmlzLmZvcm1hdFN0cmluZyx0aGlzLnZhbHVlKX1pZih0aGlzLl9lbGVtKXtpZihhLmpxcGxvdC51
c2VfZXhjYW52YXMmJndpbmRvdz0KLkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRFbGVtZW50IT0z
RD0zRHVuZGVmaW5lZCl7d2luZG93Lkdfdm1sQ2FudmFzTWFuYWdlPQpyLnVuaW5pdEVsZW1lbnQo
dGhpcy5fZWxlbS5nZXQoMCkpfXRoaXMuX2VsZW0uZW1wdHlGb3JjZSgpO3RoaXMuX2VsZW09M0Ru
dWw9Cmx9dmFyIGU9M0RmLmNhbnZhc01hbmFnZXIuZ2V0Q2FudmFzKCk7dGhpcy5fdGV4dFJlbmRl
cmVyLnNldFRleHQodGhpcy5sYWJlbD0KLGMpO3ZhciBiPTNEdGhpcy5nZXRXaWR0aChjKTt2YXIg
ZD0zRHRoaXMuZ2V0SGVpZ2h0KGMpO2Uud2lkdGg9M0RiO2UuaGVpZ2h0PQo9M0RkO2Uuc3R5bGUu
d2lkdGg9M0RiO2Uuc3R5bGUuaGVpZ2h0PTNEZDtlLnN0eWxlLnRleHRBbGlnbj0zRCJsZWZ0Ijtl
LnN0eWw9CmUucG9zaXRpb249M0QiYWJzb2x1dGUiO2U9M0RmLmNhbnZhc01hbmFnZXIuaW5pdENh
bnZhcyhlKTt0aGlzLl9lbGVtPTNEYShlKT0KO3RoaXMuX2VsZW0uY3NzKHRoaXMuX3N0eWxlcyk7
dGhpcy5fZWxlbS5hZGRDbGFzcygianFwbG90LSIrdGhpcy5heGlzKyItdGljPQprIik7ZT0zRG51
bGw7cmV0dXJuIHRoaXMuX2VsZW19O2EuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJv
dG90eXBlLnA9CmFjaz0zRGZ1bmN0aW9uKCl7dGhpcy5fdGV4dFJlbmRlcmVyLmRyYXcodGhpcy5f
ZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKT0KLHRoaXMubGFiZWwpfX0pKGpRdWVyeSk7Lyog
anFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvPQogfCBqcGxv
dC5jb20KKyAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5j
dGlvbihkKXt2YXIgZj0zRDA7ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheT0zRGZ1bmN0aW9uKHEpe3Zh
ciBvPTNEcXx8PQp7fTt0aGlzLm9wdGlvbnM9M0R7c2hvdzpkLmpxcGxvdC5jb25maWcuZW5hYmxl
UGx1Z2lucyxkZWZlckRyYXc6ZmFsc2V9O3RoaXM9Ci5vYmplY3RzPTNEW107dGhpcy5vYmplY3RO
YW1lcz0zRFtdO3RoaXMuY2FudmFzPTNEbnVsbDt0aGlzLm1hcmtlclJlbmRlcmVyPQo9M0RuZXcg
ZC5qcXBsb3QuTWFya2VyUmVuZGVyZXIoe3N0eWxlOiJsaW5lIn0pO3RoaXMubWFya2VyUmVuZGVy
ZXIuaW5pdCgpO3Q9Cmhpcy5oaWdobGlnaHRPYmplY3RJbmRleD0zRG51bGw7aWYoby5vYmplY3Rz
KXt2YXIgcz0zRG8ub2JqZWN0cyxyO2Zvcih2YXIgcD0KPTNEMDtwPHMubGVuZ3RoO3ArKyl7cj0z
RHNbcF07Zm9yKHZhciB0IGluIHIpe3N3aXRjaCh0KXtjYXNlImxpbmUiOnRoaXMuYWRkPQpMaW5l
KHJbdF0pO2JyZWFrO2Nhc2UiaG9yaXpvbnRhbExpbmUiOnRoaXMuYWRkSG9yaXpvbnRhbExpbmUo
clt0XSk7YnJlYWs7Y2E9CnNlImRhc2hlZEhvcml6b250YWxMaW5lIjp0aGlzLmFkZERhc2hlZEhv
cml6b250YWxMaW5lKHJbdF0pO2JyZWFrO2Nhc2UidmVydD0KaWNhbExpbmUiOnRoaXMuYWRkVmVy
dGljYWxMaW5lKHJbdF0pO2JyZWFrO2Nhc2UiZGFzaGVkVmVydGljYWxMaW5lIjp0aGlzLmFkPQpk
RGFzaGVkVmVydGljYWxMaW5lKHJbdF0pO2JyZWFrO2Nhc2UicmVjdGFuZ2xlIjp0aGlzLmFkZFJl
Y3RhbmdsZShyW3RdKTticmU9CmFrO2RlZmF1bHQ6YnJlYWt9fX19ZC5leHRlbmQodHJ1ZSx0aGlz
Lm9wdGlvbnMsbyl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucD0Kb3N0UGxvdEluaXQ9M0RmdW5j
dGlvbihxLHAsbyl7dmFyIG49M0RvfHx7fTt0aGlzLnBsdWdpbnMuY2FudmFzT3ZlcmxheT0zRG5l
PQp3IGQuanFwbG90LkNhbnZhc092ZXJsYXkobi5jYW52YXNPdmVybGF5KX07ZnVuY3Rpb24gaSgp
e3RoaXMudWlkPTNEbnVsbDt0aGk9CnMudHlwZT0zRG51bGw7dGhpcy5ncmlkU3RhcnQ9M0RudWxs
O3RoaXMuZ3JpZFN0b3A9M0RudWxsO3RoaXMudG9vbHRpcFdpZHRoRj0KYWN0b3I9M0QwO3RoaXMu
b3B0aW9ucz0zRHtuYW1lOm51bGwsc2hvdzp0cnVlLGxpbmVXaWR0aDoyLGxpbmVDYXA6InJvdW5k
IixjPQpvbG9yOiIjNjY2NjY2IixzaGFkb3c6dHJ1ZSxzaGFkb3dBbmdsZTo0NSxzaGFkb3dPZmZz
ZXQ6MSxzaGFkb3dEZXB0aDozLHNoYWQ9Cm93QWxwaGE6IjAuMDciLHhheGlzOiJ4YXhpcyIseWF4
aXM6InlheGlzIixzaG93VG9vbHRpcDpmYWxzZSxzaG93VG9vbHRpcFByZT0KY2lzaW9uOjAuNix0
b29sdGlwTG9jYXRpb246Im53IixmYWRlVG9vbHRpcDp0cnVlLHRvb2x0aXBGYWRlU3BlZWQ6ImZh
c3QiLHRvPQpvbHRpcE9mZnNldDo0LHRvb2x0aXBGb3JtYXRTdHJpbmc6IiVkLCAlZCJ9fWZ1bmN0
aW9uIG0obil7aS5jYWxsKHRoaXMpO3RoaXM9Ci50eXBlPTNEInJlY3RhbmdsZSI7dmFyIG89M0R7
eG1pbjpudWxsLHhtYXg6bnVsbCx4T2Zmc2V0OiI2cHgiLHhtaW5PZmZzZXQ6bj0KdWxsLHhtYXhP
ZmZzZXQ6bnVsbCx5bWluOm51bGwseW1heDpudWxsLHlPZmZzZXQ6IjZweCIseW1pbk9mZnNldDpu
dWxsLHltYXhPPQpmZnNldDpudWxsfTtkLmV4dGVuZCh0cnVlLHRoaXMub3B0aW9ucyxvLG4pO2lm
KHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWM9CmlzaW9uPDAuMDEpe3RoaXMub3B0aW9ucy5z
aG93VG9vbHRpcFByZWNpc2lvbj0zRDAuMDF9fW0ucHJvdG90eXBlPTNEbmV3IGkoKT0KO20ucHJv
dG90eXBlLmNvbnN0cnVjdG9yPTNEbTtmdW5jdGlvbiBiKG4pe2kuY2FsbCh0aGlzKTt0aGlzLnR5
cGU9M0QibGluZSI7PQp2YXIgbz0zRHtzdGFydDpbXSxzdG9wOltdfTtkLmV4dGVuZCh0cnVlLHRo
aXMub3B0aW9ucyxvLG4pO2lmKHRoaXMub3B0aW9ucy49CnNob3dUb29sdGlwUHJlY2lzaW9uPDAu
MDEpe3RoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbj0zRDAuMDF9fWIucHJvdD0Kb3R5
cGU9M0RuZXcgaSgpO2IucHJvdG90eXBlLmNvbnN0cnVjdG9yPTNEYjtmdW5jdGlvbiBlKG4pe2ku
Y2FsbCh0aGlzKTt0aGlzPQoudHlwZT0zRCJob3Jpem9udGFsTGluZSI7dmFyIG89M0R7eTpudWxs
LHhtaW46bnVsbCx4bWF4Om51bGwseE9mZnNldDoiNnB4Iiw9CnhtaW5PZmZzZXQ6bnVsbCx4bWF4
T2Zmc2V0Om51bGx9O2QuZXh0ZW5kKHRydWUsdGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcD0K
dGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlw
UHJlY2lzaW9uPTNEMC4wMX19PQplLnByb3RvdHlwZT0zRG5ldyBpKCk7ZS5wcm90b3R5cGUuY29u
c3RydWN0b3I9M0RlO2Z1bmN0aW9uIGoobil7aS5jYWxsKHRoaXM9Cik7dGhpcy50eXBlPTNEImRh
c2hlZEhvcml6b250YWxMaW5lIjt2YXIgbz0zRHt5Om51bGwseG1pbjpudWxsLHhtYXg6bnVsbCx4
Tz0KZmZzZXQ6IjZweCIseG1pbk9mZnNldDpudWxsLHhtYXhPZmZzZXQ6bnVsbCxkYXNoUGF0dGVy
bjpbOCw4XX07ZC5leHRlbmQodHJ1PQplLHRoaXMub3B0aW9ucyxvLG4pO2lmKHRoaXMub3B0aW9u
cy5zaG93VG9vbHRpcFByZWNpc2lvbjwwLjAxKXt0aGlzLm9wdGlvbnM9Ci5zaG93VG9vbHRpcFBy
ZWNpc2lvbj0zRDAuMDF9fWoucHJvdG90eXBlPTNEbmV3IGkoKTtqLnByb3RvdHlwZS5jb25zdHJ1
Y3Rvcj0KPTNEajtmdW5jdGlvbiBjKG4pe2kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9M0QidmVydGlj
YWxMaW5lIjt2YXIgbz0zRHt4Om51bGwsPQp5bWluOm51bGwseW1heDpudWxsLHlPZmZzZXQ6IjZw
eCIseW1pbk9mZnNldDpudWxsLHltYXhPZmZzZXQ6bnVsbH07ZC5leHRlbmQ9Cih0cnVlLHRoaXMu
b3B0aW9ucyxvLG4pO2lmKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbjwwLjAxKXt0
aGlzLm9wdD0KaW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbj0zRDAuMDF9fWMucHJvdG90eXBlPTNE
bmV3IGkoKTtjLnByb3RvdHlwZS5jb25zdHJ1PQpjdG9yPTNEYztmdW5jdGlvbiBsKG4pe2kuY2Fs
bCh0aGlzKTt0aGlzLnR5cGU9M0QiZGFzaGVkVmVydGljYWxMaW5lIjt0aGlzLnM9CnRhcnQ9M0Ru
dWxsO3RoaXMuc3RvcD0zRG51bGw7dmFyIG89M0R7eDpudWxsLHltaW46bnVsbCx5bWF4Om51bGws
eU9mZnNldDoiNj0KcHgiLHltaW5PZmZzZXQ6bnVsbCx5bWF4T2Zmc2V0Om51bGwsZGFzaFBhdHRl
cm46WzgsOF19O2QuZXh0ZW5kKHRydWUsdGhpcy5vPQpwdGlvbnMsbyxuKTtpZih0aGlzLm9wdGlv
bnMuc2hvd1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb289Cmx0aXBQ
cmVjaXNpb249M0QwLjAxfX1sLnByb3RvdHlwZT0zRG5ldyBpKCk7bC5wcm90b3R5cGUuY29uc3Ry
dWN0b3I9M0RsO2Quaj0KcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkTGluZT0zRGZ1
bmN0aW9uKG8pe3ZhciBuPTNEbmV3IGIobyk7bi51aWQ9Cj0zRGYrKzt0aGlzLm9iamVjdHMucHVz
aChuKTt0aGlzLm9iamVjdE5hbWVzLnB1c2gobi5vcHRpb25zLm5hbWUpfTtkLmpxcGxvdD0KLkNh
bnZhc092ZXJsYXkucHJvdG90eXBlLmFkZEhvcml6b250YWxMaW5lPTNEZnVuY3Rpb24obyl7dmFy
IG49M0RuZXcgZShvKTtuPQoudWlkPTNEZisrO3RoaXMub2JqZWN0cy5wdXNoKG4pO3RoaXMub2Jq
ZWN0TmFtZXMucHVzaChuLm9wdGlvbnMubmFtZSl9O2QuanE9CnBsb3QuQ2FudmFzT3ZlcmxheS5w
cm90b3R5cGUuYWRkRGFzaGVkSG9yaXpvbnRhbExpbmU9M0RmdW5jdGlvbihvKXt2YXIgbj0zRD0K
bmV3IGoobyk7bi51aWQ9M0RmKys7dGhpcy5vYmplY3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1l
cy5wdXNoKG4ub3B0aW9ucy5uPQphbWUpfTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlw
ZS5hZGRWZXJ0aWNhbExpbmU9M0RmdW5jdGlvbihvKXt2YXIgbj0KPTNEbmV3IGMobyk7bi51aWQ9
M0RmKys7dGhpcy5vYmplY3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1lcy5wdXNoKG4ub3B0aW9u
PQpzLm5hbWUpfTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGREYXNoZWRWZXJ0
aWNhbExpbmU9M0RmdW5jdGlvbig9Cm8pe3ZhciBuPTNEbmV3IGwobyk7bi51aWQ9M0RmKys7dGhp
cy5vYmplY3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1lcy5wdXNoKD0Kbi5vcHRpb25zLm5hbWUp
fTtkLmpxcGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGRSZWN0YW5nbGU9M0RmdW5jdGlv
bihvPQope3ZhciBuPTNEbmV3IG0obyk7bi51aWQ9M0RmKys7dGhpcy5vYmplY3RzLnB1c2gobik7
dGhpcy5vYmplY3ROYW1lcy5wdXNoKG49Ci5vcHRpb25zLm5hbWUpfTtkLmpxcGxvdC5DYW52YXNP
dmVybGF5LnByb3RvdHlwZS5yZW1vdmVPYmplY3Q9M0RmdW5jdGlvbihuKT0Ke2lmKGQudHlwZShu
KT0zRD0zRCJudW1iZXIiKXt0aGlzLm9iamVjdHMuc3BsaWNlKG4sMSk7dGhpcy5vYmplY3ROYW1l
cy5zcGxpPQpjZShuLDEpfWVsc2V7dmFyIG89M0RkLmluQXJyYXkobix0aGlzLm9iamVjdE5hbWVz
KTtpZihvIT0zRC0xKXt0aGlzLm9iamVjdHM9Ci5zcGxpY2UobywxKTt0aGlzLm9iamVjdE5hbWVz
LnNwbGljZShvLDEpfX19O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eT0KcGUuZ2V0T2Jq
ZWN0PTNEZnVuY3Rpb24obil7aWYoZC50eXBlKG4pPTNEPTNEIm51bWJlciIpe3JldHVybiB0aGlz
Lm9iamVjdHNbPQpuXX1lbHNle3ZhciBvPTNEZC5pbkFycmF5KG4sdGhpcy5vYmplY3ROYW1lcyk7
aWYobyE9M0QtMSl7cmV0dXJuIHRoaXMub2JqZWM9CnRzW29dfX19O2QuanFwbG90LkNhbnZhc092
ZXJsYXkucHJvdG90eXBlLmdldD0zRGQuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdD0Kb3R5cGUu
Z2V0T2JqZWN0O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmNsZWFyPTNEZnVuY3Rp
b24obil7dGhpcy5jPQphbnZhcy5fY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMuZ2V0V2lk
dGgoKSx0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSl9O2Q9Ci5qcXBsb3QuQ2FudmFzT3ZlcmxheS5w
cm90b3R5cGUuZHJhdz0zRGZ1bmN0aW9uKEspe3ZhciBBLHY9M0R0aGlzLm9iamVjdHMsRj0KPTNE
dGhpcy5tYXJrZXJSZW5kZXJlcixzLEc7aWYodGhpcy5vcHRpb25zLnNob3cpe3RoaXMuY2FudmFz
Ll9jdHguY2xlYXJSZWN0PQooMCwwLHRoaXMuY2FudmFzLmdldFdpZHRoKCksdGhpcy5jYW52YXMu
Z2V0SGVpZ2h0KCkpO2Zvcih2YXIgSD0zRDA7SDx2Lmxlbmc9CnRoO0grKyl7QT0zRHZbSF07dmFy
IEI9M0RkLmV4dGVuZCh0cnVlLHt9LEEub3B0aW9ucyk7aWYoQS5vcHRpb25zLnNob3cpe0Yucz0K
aGFkb3c9M0RBLm9wdGlvbnMuc2hhZG93O0EudG9vbHRpcFdpZHRoRmFjdG9yPTNEQS5vcHRpb25z
LmxpbmVXaWR0aC9BLm9wdGlvPQpucy5zaG93VG9vbHRpcFByZWNpc2lvbjtzd2l0Y2goQS50eXBl
KXtjYXNlImxpbmUiOkYuc3R5bGU9M0QibGluZSI7Qi5jbG9zZVA9CmF0aD0zRGZhbHNlO3M9M0Rb
Sy5heGVzW0Eub3B0aW9ucy54YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMuc3RhcnRbMF0pLEsu
YT0KeGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMuc3RhcnRbMV0pXTtH
PTNEW0suYXhlc1tBLm9wdGlvbnMuPQp4YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMuc3RvcFsw
XSksSy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm89CnB0aW9ucy5zdG9wWzFd
KV07QS5ncmlkU3RhcnQ9M0RzO0EuZ3JpZFN0b3A9M0RHO0YuZHJhdyhzLEcsdGhpcy5jYW52YXMu
X2N0eD0KLEIpO2JyZWFrO2Nhc2UiaG9yaXpvbnRhbExpbmUiOmlmKEEub3B0aW9ucy55IT0zRG51
bGwpe0Yuc3R5bGU9M0QibGluZSI7Qi5jPQpsb3NlUGF0aD0zRGZhbHNlO3ZhciBwPTNESy5heGVz
W0Eub3B0aW9ucy54YXhpc10sUyxMLHc9M0RLLmF4ZXNbQS5vcHRpb25zLnk9CmF4aXNdLnNlcmll
c191MnAoQS5vcHRpb25zLnkpLEk9M0RBLm9wdGlvbnMueG1pbk9mZnNldHx8QS5vcHRpb25zLnhP
ZmZzZXQsdD0KPTNEQS5vcHRpb25zLnhtYXhPZmZzZXR8fEEub3B0aW9ucy54T2Zmc2V0O2lmKEEu
b3B0aW9ucy54bWluIT0zRG51bGwpe1M9M0RwPQouc2VyaWVzX3UycChBLm9wdGlvbnMueG1pbil9
ZWxzZXtpZihJIT0zRG51bGwpe2lmKGQudHlwZShJKT0zRD0zRCJudW1iZXIiKXs9ClM9M0RwLnNl
cmllc191MnAocC5taW4rSSl9ZWxzZXtpZihkLnR5cGUoSSk9M0Q9M0Qic3RyaW5nIil7Uz0zRHAu
c2VyaWVzX3UycD0KKHAubWluKStwYXJzZUZsb2F0KEkpfX19fWlmKEEub3B0aW9ucy54bWF4IT0z
RG51bGwpe0w9M0RwLnNlcmllc191MnAoQS5vcHRpPQpvbnMueG1heCl9ZWxzZXtpZih0IT0zRG51
bGwpe2lmKGQudHlwZSh0KT0zRD0zRCJudW1iZXIiKXtMPTNEcC5zZXJpZXNfdTJwKHA9Ci5tYXgt
dCl9ZWxzZXtpZihkLnR5cGUodCk9M0Q9M0Qic3RyaW5nIil7TD0zRHAuc2VyaWVzX3UycChwLm1h
eCktcGFyc2VGbG9hdD0KKHQpfX19fWlmKEwhPTNEbnVsbCYmUyE9M0RudWxsKXtBLmdyaWRTdGFy
dD0zRFtTLHddO0EuZ3JpZFN0b3A9M0RbTCx3XTtGLmRyPQphdyhbUyx3XSxbTCx3XSx0aGlzLmNh
bnZhcy5fY3R4LEIpfX1icmVhaztjYXNlImRhc2hlZEhvcml6b250YWxMaW5lIjp2YXIgbz0KPTNE
QS5vcHRpb25zLmRhc2hQYXR0ZXJuO3ZhciBFPTNEMDtmb3IodmFyIE09M0QwO008by5sZW5ndGg7
TSsrKXtFKz0zRG9bTV19PQppZihBLm9wdGlvbnMueSE9M0RudWxsKXtGLnN0eWxlPTNEImxpbmUi
O0IuY2xvc2VQYXRoPTNEZmFsc2U7dmFyIHA9M0RLLmF4ZXM9CltBLm9wdGlvbnMueGF4aXNdLFMs
TCx3PTNESy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueSksST0K
PTNEQS5vcHRpb25zLnhtaW5PZmZzZXR8fEEub3B0aW9ucy54T2Zmc2V0LHQ9M0RBLm9wdGlvbnMu
eG1heE9mZnNldHx8QS5vcHRpPQpvbnMueE9mZnNldDtpZihBLm9wdGlvbnMueG1pbiE9M0RudWxs
KXtTPTNEcC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWluKX1lbHM9CmV7aWYoSSE9M0RudWxsKXtp
ZihkLnR5cGUoSSk9M0Q9M0QibnVtYmVyIil7Uz0zRHAuc2VyaWVzX3UycChwLm1pbitJKX1lbHNl
ez0KaWYoZC50eXBlKEkpPTNEPTNEInN0cmluZyIpe1M9M0RwLnNlcmllc191MnAocC5taW4pK3Bh
cnNlRmxvYXQoSSl9fX19aWYoQS5vPQpwdGlvbnMueG1heCE9M0RudWxsKXtMPTNEcC5zZXJpZXNf
dTJwKEEub3B0aW9ucy54bWF4KX1lbHNle2lmKHQhPTNEbnVsbCl7aWY9CihkLnR5cGUodCk9M0Q9
M0QibnVtYmVyIil7TD0zRHAuc2VyaWVzX3UycChwLm1heC10KX1lbHNle2lmKGQudHlwZSh0KT0z
RD0zRD0KInN0cmluZyIpe0w9M0RwLnNlcmllc191MnAocC5tYXgpLXBhcnNlRmxvYXQodCl9fX19
aWYoTCE9M0RudWxsJiZTIT0zRG51bGwpPQp7QS5ncmlkU3RhcnQ9M0RbUyx3XTtBLmdyaWRTdG9w
PTNEW0wsd107dmFyIHI9M0RNYXRoLmNlaWwoKEwtUykvRSk7dmFyIFE9M0Q9ClMsTztmb3IodmFy
IE09M0QwO008cjtNKyspe2Zvcih2YXIgSj0zRDA7SjxvLmxlbmd0aDtKKz0zRDIpe089M0RRK29b
Sl07Ri5kcj0KYXcoW1Esd10sW08sd10sdGhpcy5jYW52YXMuX2N0eCxCKTtRKz0zRG9bSl07aWYo
SjxvLmxlbmd0aC0xKXtRKz0zRG9bSisxXX19PQp9fX1icmVhaztjYXNlInZlcnRpY2FsTGluZSI6
aWYoQS5vcHRpb25zLnghPTNEbnVsbCl7Ri5zdHlsZT0zRCJsaW5lIjtCLmNsb3M9CmVQYXRoPTNE
ZmFsc2U7dmFyIE49M0RLLmF4ZXNbQS5vcHRpb25zLnlheGlzXSxuLHUsej0zREsuYXhlc1tBLm9w
dGlvbnMueGF4aT0Kc10uc2VyaWVzX3UycChBLm9wdGlvbnMueCksRD0zREEub3B0aW9ucy55bWlu
T2Zmc2V0fHxBLm9wdGlvbnMueU9mZnNldCxxPTNEPQpBLm9wdGlvbnMueW1heE9mZnNldHx8QS5v
cHRpb25zLnlPZmZzZXQ7aWYoQS5vcHRpb25zLnltaW4hPTNEbnVsbCl7bj0zRE4uc2U9CnJpZXNf
dTJwKEEub3B0aW9ucy55bWluKX1lbHNle2lmKEQhPTNEbnVsbCl7aWYoZC50eXBlKEQpPTNEPTNE
Im51bWJlciIpe249Cj0zRE4uc2VyaWVzX3UycChOLm1pbi1EKX1lbHNle2lmKGQudHlwZShEKT0z
RD0zRCJzdHJpbmciKXtuPTNETi5zZXJpZXNfdTJwKD0KTi5taW4pLXBhcnNlRmxvYXQoRCl9fX19
aWYoQS5vcHRpb25zLnltYXghPTNEbnVsbCl7dT0zRE4uc2VyaWVzX3UycChBLm9wdGlvPQpucy55
bWF4KX1lbHNle2lmKHEhPTNEbnVsbCl7aWYoZC50eXBlKHEpPTNEPTNEIm51bWJlciIpe3U9M0RO
LnNlcmllc191MnAoTi49Cm1heCtxKX1lbHNle2lmKGQudHlwZShxKT0zRD0zRCJzdHJpbmciKXt1
PTNETi5zZXJpZXNfdTJwKE4ubWF4KStwYXJzZUZsb2F0KD0KcSl9fX19aWYodSE9M0RudWxsJiZu
IT0zRG51bGwpe0EuZ3JpZFN0YXJ0PTNEW3osbl07QS5ncmlkU3RvcD0zRFt6LHVdO0YuZHJhPQp3
KFt6LG5dLFt6LHVdLHRoaXMuY2FudmFzLl9jdHgsQil9fWJyZWFrO2Nhc2UiZGFzaGVkVmVydGlj
YWxMaW5lIjp2YXIgbz0zREE9Ci5vcHRpb25zLmRhc2hQYXR0ZXJuO3ZhciBFPTNEMDtmb3IodmFy
IE09M0QwO008by5sZW5ndGg7TSsrKXtFKz0zRG9bTV19aWYoQT0KLm9wdGlvbnMueCE9M0RudWxs
KXtGLnN0eWxlPTNEImxpbmUiO0IuY2xvc2VQYXRoPTNEZmFsc2U7dmFyIE49M0RLLmF4ZXNbQS5v
PQpwdGlvbnMueWF4aXNdLG4sdSx6PTNESy5heGVzW0Eub3B0aW9ucy54YXhpc10uc2VyaWVzX3Uy
cChBLm9wdGlvbnMueCksRD0zREE9Ci5vcHRpb25zLnltaW5PZmZzZXR8fEEub3B0aW9ucy55T2Zm
c2V0LHE9M0RBLm9wdGlvbnMueW1heE9mZnNldHx8QS5vcHRpb25zLj0KeU9mZnNldDtpZihBLm9w
dGlvbnMueW1pbiE9M0RudWxsKXtuPTNETi5zZXJpZXNfdTJwKEEub3B0aW9ucy55bWluKX1lbHNl
e2lmPQooRCE9M0RudWxsKXtpZihkLnR5cGUoRCk9M0Q9M0QibnVtYmVyIil7bj0zRE4uc2VyaWVz
X3UycChOLm1pbi1EKX1lbHNle2lmKGQ9Ci50eXBlKEQpPTNEPTNEInN0cmluZyIpe249M0ROLnNl
cmllc191MnAoTi5taW4pLXBhcnNlRmxvYXQoRCl9fX19aWYoQS5vcHRpbz0KbnMueW1heCE9M0Ru
dWxsKXt1PTNETi5zZXJpZXNfdTJwKEEub3B0aW9ucy55bWF4KX1lbHNle2lmKHEhPTNEbnVsbCl7
aWYoZC50PQp5cGUocSk9M0Q9M0QibnVtYmVyIil7dT0zRE4uc2VyaWVzX3UycChOLm1heCtxKX1l
bHNle2lmKGQudHlwZShxKT0zRD0zRCJzdHI9CmluZyIpe3U9M0ROLnNlcmllc191MnAoTi5tYXgp
K3BhcnNlRmxvYXQocSl9fX19aWYodSE9M0RudWxsJiZuIT0zRG51bGwpe0EuZz0KcmlkU3RhcnQ9
M0RbeixuXTtBLmdyaWRTdG9wPTNEW3osdV07dmFyIHI9M0RNYXRoLmNlaWwoKG4tdSkvRSk7dmFy
IEM9M0QoKHIqPQpFKS0obi11KSkvMjt2YXIgUT0zRG4sTyxQLFI7Zm9yKHZhciBNPTNEMDtNPHI7
TSsrKXtmb3IodmFyIEo9M0QwO0o8by5sZW5ndGg9CjtKKz0zRDIpe089M0RRLW9bSl07aWYoTzx1
KXtPPTNEdX1pZihRPHUpe1E9M0R1fUYuZHJhdyhbeixRXSxbeixPXSx0aGlzLmNhbj0KdmFzLl9j
dHgsQik7US09M0RvW0pdO2lmKEo8by5sZW5ndGgtMSl7US09M0RvW0orMV19fX19fWJyZWFrO2Nh
c2UicmVjdGFuZ2xlPQoiOkYuc3R5bGU9M0QibGluZSI7Qi5jbG9zZVBhdGg9M0R0cnVlO3ZhciBw
PTNESy5heGVzW0Eub3B0aW9ucy54YXhpc10sUyxMLHc9Cj0zREsuYXhlc1tBLm9wdGlvbnMueWF4
aXNdLnNlcmllc191MnAoQS5vcHRpb25zLnkpLEk9M0RBLm9wdGlvbnMueG1pbk9mZnNldD0KfHxB
Lm9wdGlvbnMueE9mZnNldCx0PTNEQS5vcHRpb25zLnhtYXhPZmZzZXR8fEEub3B0aW9ucy54T2Zm
c2V0O2lmKEEub3B0aW9uPQpzLnhtaW4hPTNEbnVsbCl7Uz0zRHAuc2VyaWVzX3UycChBLm9wdGlv
bnMueG1pbil9ZWxzZXtpZihJIT0zRG51bGwpe2lmKGQudHk9CnBlKEkpPTNEPTNEIm51bWJlciIp
e1M9M0RwLnNlcmllc191MnAocC5taW4rSSl9ZWxzZXtpZihkLnR5cGUoSSk9M0Q9M0Qic3RyaT0K
bmciKXtTPTNEcC5zZXJpZXNfdTJwKHAubWluKStwYXJzZUZsb2F0KEkpfX19fWlmKEEub3B0aW9u
cy54bWF4IT0zRG51bGwpe0w9Cj0zRHAuc2VyaWVzX3UycChBLm9wdGlvbnMueG1heCl9ZWxzZXtp
Zih0IT0zRG51bGwpe2lmKGQudHlwZSh0KT0zRD0zRCJudW1iZT0KciIpe0w9M0RwLnNlcmllc191
MnAocC5tYXgtdCl9ZWxzZXtpZihkLnR5cGUodCk9M0Q9M0Qic3RyaW5nIil7TD0zRHAuc2VyaWVz
PQpfdTJwKHAubWF4KS1wYXJzZUZsb2F0KHQpfX19fXZhciBOPTNESy5heGVzW0Eub3B0aW9ucy55
YXhpc10sbix1LHo9M0RLLmF4ZXM9CltBLm9wdGlvbnMueGF4aXNdLnNlcmllc191MnAoQS5vcHRp
b25zLngpLEQ9M0RBLm9wdGlvbnMueW1pbk9mZnNldHx8QS5vcHRpbz0KbnMueU9mZnNldCxxPTNE
QS5vcHRpb25zLnltYXhPZmZzZXR8fEEub3B0aW9ucy55T2Zmc2V0O2lmKEEub3B0aW9ucy55bWlu
IT0KPTNEbnVsbCl7bj0zRE4uc2VyaWVzX3UycChBLm9wdGlvbnMueW1pbil9ZWxzZXtpZihEIT0z
RG51bGwpe2lmKGQudHlwZShEKT0KPTNEPTNEIm51bWJlciIpe249M0ROLnNlcmllc191MnAoTi5t
aW4tRCl9ZWxzZXtpZihkLnR5cGUoRCk9M0Q9M0Qic3RyaW5nIil7PQpuPTNETi5zZXJpZXNfdTJw
KE4ubWluKS1wYXJzZUZsb2F0KEQpfX19fWlmKEEub3B0aW9ucy55bWF4IT0zRG51bGwpe3U9M0RO
LnM9CmVyaWVzX3UycChBLm9wdGlvbnMueW1heCl9ZWxzZXtpZihxIT0zRG51bGwpe2lmKGQudHlw
ZShxKT0zRD0zRCJudW1iZXIiKXt1PQo9M0ROLnNlcmllc191MnAoTi5tYXgrcSl9ZWxzZXtpZihk
LnR5cGUocSk9M0Q9M0Qic3RyaW5nIil7dT0zRE4uc2VyaWVzX3UycCg9Ck4ubWF4KStwYXJzZUZs
b2F0KHEpfX19fWlmKEwhPTNEbnVsbCYmUyE9M0RudWxsJiZ1IT0zRG51bGwmJm4hPTNEbnVsbCl7
QS5ncj0KaWRTdGFydD0zRFtTLG5dO0EuZ3JpZFN0b3A9M0RbTCx1XTt0aGlzLmNhbnZhcy5fY3R4
LmZpbGxTdHlsZT0zREEub3B0aW9ucy5jPQpvbG9yO3RoaXMuY2FudmFzLl9jdHguZmlsbFJlY3Qo
UyxuLEwtUyx1LW4pfWJyZWFrO2RlZmF1bHQ6YnJlYWt9fX19fTtkLmpxcGw9Cm90LkNhbnZhc092
ZXJsYXkucG9zdFBsb3REcmF3PTNEZnVuY3Rpb24oKXt2YXIgbz0zRHRoaXMucGx1Z2lucy5jYW52
YXNPdmVybD0KYXk7aWYobyYmby5oaWdobGlnaHRDYW52YXMpe28uaGlnaGxpZ2h0Q2FudmFzLnJl
c2V0Q2FudmFzKCk7by5oaWdobGlnaHRDYW52PQphcz0zRG51bGx9by5jYW52YXM9M0RuZXcgZC5q
cXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmU9CmZvcmUoby5j
YW52YXMuY3JlYXRlRWxlbWVudCh0aGlzLl9ncmlkUGFkZGluZywianFwbG90LW92ZXJsYXlDYW52
YXMtY2FudmFzIj0KLHRoaXMuX3Bsb3REaW1lbnNpb25zLHRoaXMpKTtvLmNhbnZhcy5zZXRDb250
ZXh0KCk7aWYoIW8uZGVmZXJEcmF3KXtvLmRyYXcoPQp0aGlzKX12YXIgbj0zRGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpO28uX3Rvb2x0aXBFbGVtPTNEZChuKTtuPTNEbnVsbDs9Cm8uX3Rv
b2x0aXBFbGVtLmFkZENsYXNzKCJqcXBsb3QtY2FudmFzT3ZlcmxheS10b29sdGlwIik7by5fdG9v
bHRpcEVsZW0uY3NzKD0Ke3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSJ9KTt0aGlz
LmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZShvLl90b29sPQp0aXBFbGVtKTt0aGlzLmV2ZW50Q2Fu
dmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtlbGVtOm8uX3Rvb2x0aXBFbGVtfSxmdW49CmN0
aW9uKHApe3AuZGF0YS5lbGVtLmhpZGUoKX0pO3ZhciBvPTNEbnVsbH07ZnVuY3Rpb24gayhzLHEs
cixwKXt2YXIgdT0zRHMucD0KbHVnaW5zLmNhbnZhc092ZXJsYXk7dmFyIG89M0R1Ll90b29sdGlw
RWxlbTt2YXIgbj0zRHEub3B0aW9ucyx2LHQ7by5odG1sKGQuPQpqcXBsb3Quc3ByaW50ZihuLnRv
b2x0aXBGb3JtYXRTdHJpbmcscFswXSxwWzFdKSk7c3dpdGNoKG4udG9vbHRpcExvY2F0aW9uKXs9
CmNhc2UibnciOnY9M0RyWzBdK3MuX2dyaWRQYWRkaW5nLmxlZnQtby5vdXRlcldpZHRoKHRydWUp
LW4udG9vbHRpcE9mZnNldDt0PQo9M0RyWzFdK3MuX2dyaWRQYWRkaW5nLnRvcC1uLnRvb2x0aXBP
ZmZzZXQtby5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm49CiI6dj0zRHJbMF0rcy5fZ3Jp
ZFBhZGRpbmcubGVmdC1vLm91dGVyV2lkdGgodHJ1ZSkvMjt0PTNEclsxXStzLl9ncmlkUGFkZGlu
Zz0KLnRvcC1uLnRvb2x0aXBPZmZzZXQtby5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm5l
Ijp2PTNEclswXStzLl9ncmlkUGFkPQpkaW5nLmxlZnQrbi50b29sdGlwT2Zmc2V0O3Q9M0RyWzFd
K3MuX2dyaWRQYWRkaW5nLnRvcC1uLnRvb2x0aXBPZmZzZXQtby5vdXQ9CmVySGVpZ2h0KHRydWUp
O2JyZWFrO2Nhc2UiZSI6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdCtuLnRvb2x0aXBPZmZz
ZXQ7dD0KPTNEclsxXStzLl9ncmlkUGFkZGluZy50b3Atby5vdXRlckhlaWdodCh0cnVlKS8yO2Jy
ZWFrO2Nhc2Uic2UiOnY9M0RyWzBdK3MuPQpfZ3JpZFBhZGRpbmcubGVmdCtuLnRvb2x0aXBPZmZz
ZXQ7dD0zRHJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wK24udG9vbHRpcE9mZnM9CmV0O2JyZWFrO2Nh
c2UicyI6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdC1vLm91dGVyV2lkdGgodHJ1ZSkvMjt0
PTNEclsxXT0KK3MuX2dyaWRQYWRkaW5nLnRvcCtuLnRvb2x0aXBPZmZzZXQ7YnJlYWs7Y2FzZSJz
dyI6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcuPQpsZWZ0LW8ub3V0ZXJXaWR0aCh0cnVlKS1uLnRv
b2x0aXBPZmZzZXQ7dD0zRHJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wK24udG9vbHQ9CmlwT2Zmc2V0
O2JyZWFrO2Nhc2UidyI6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcubGVmdC1vLm91dGVyV2lkdGgo
dHJ1ZSktbi50bz0Kb2x0aXBPZmZzZXQ7dD0zRHJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wLW8ub3V0
ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztkZWZhdWx0PQo6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcu
bGVmdC1vLm91dGVyV2lkdGgodHJ1ZSktbi50b29sdGlwT2Zmc2V0O3Q9M0RyWzFdK3M9Ci5fZ3Jp
ZFBhZGRpbmcudG9wLW4udG9vbHRpcE9mZnNldC1vLm91dGVySGVpZ2h0KHRydWUpO2JyZWFrfW8u
Y3NzKCJsZWZ0Iix2KT0KO28uY3NzKCJ0b3AiLHQpO2lmKG4uZmFkZVRvb2x0aXApe28uc3RvcCh0
cnVlLHRydWUpLmZhZGVJbihuLnRvb2x0aXBGYWRlU3BlPQplZCl9ZWxzZXtvLnNob3coKX1vPTNE
bnVsbH1mdW5jdGlvbiBoKHoscSxzLHApe3ZhciBvPTNEelswXTt2YXIgbj0zRHpbMV07dmE9CnIg
eT0zRE1hdGgucm91bmQoc1swXSk7dmFyIHg9M0RNYXRoLnJvdW5kKHNbMV0pO3ZhciB1PTNETWF0
aC5yb3VuZChxWzBdKTt2YT0KciB0PTNETWF0aC5yb3VuZChxWzFdKTt2YXIgcj0zRE1hdGguc3Fy
dChNYXRoLnBvdyh5LXUsMikrTWF0aC5wb3coeC10LDIpKTt2PQphciBBPTNEcCpyO3ZhciB3PTNE
TWF0aC5hYnMoKHUteSkqKG4teCktKHQteCkqKG8teSkpO3ZhciB2PTNEKHc8QSk/dHJ1ZTpmYWw9
CnNlO3JldHVybiB2fWZ1bmN0aW9uIGcoeCxxLHIscCl7dmFyIG89M0R4WzBdO3ZhciBuPTNEeFsx
XTt2YXIgdz0zRE1hdGgucm91bj0KZChyWzBdKTt2YXIgdj0zRE1hdGgucm91bmQoclsxXSk7dmFy
IHQ9M0RNYXRoLnJvdW5kKHFbMF0pO3ZhciBzPTNETWF0aC5yb3VuPQpkKHFbMV0pO3ZhciB5O2lm
KHc+dCl7eT0zRHc7dz0zRHQ7dD0zRHl9aWYodj5zKXt5PTNEdjt2PTNEcztzPTNEeX12YXIgdT0z
RCg9Cm8+PTNEdyYmbzw9M0R0JiZuPj0zRHYmJm48PTNEcyk7cmV0dXJuIHV9ZnVuY3Rpb24gYSh6
LHcscixBLHgpe3ZhciB5PTNEeC5wbD0KdWdpbnMuY2FudmFzT3ZlcmxheTt2YXIgdj0zRHkub2Jq
ZWN0czt2YXIgcz0zRHYubGVuZ3RoO3ZhciB1LG89M0RmYWxzZTt2YXIgPQpxO2Zvcih2YXIgdD0z
RDA7dDxzO3QrKyl7dT0zRHZbdF07aWYodS5vcHRpb25zLnNob3dUb29sdGlwKXt2YXIgcDtpZih1
LnR5cGU9Cj0zRD0zRD0zRCJyZWN0YW5nbGUiKXtwPTNEZyhbdy54LHcueV0sdS5ncmlkU3RhcnQs
dS5ncmlkU3RvcCx1LnRvb2x0aXBXaWR0aD0KRmFjdG9yKX1lbHNle3A9M0RoKFt3Lngsdy55XSx1
LmdyaWRTdGFydCx1LmdyaWRTdG9wLHUudG9vbHRpcFdpZHRoRmFjdG9yKX1yPQo9M0RbeC5heGVz
W3Uub3B0aW9ucy54YXhpc10uc2VyaWVzX3AydSh3LngpLHguYXhlc1t1Lm9wdGlvbnMueWF4aXNd
LnNlcmllc189CnAydSh3LnkpXTtpZihwJiZ5LmhpZ2hsaWdodE9iamVjdEluZGV4PTNEPTNEbnVs
bCl7c3dpdGNoKHUudHlwZSl7Y2FzZSJsaW5lIj0KOmsoeCx1LFt3Lngsdy55XSxyKTticmVhaztj
YXNlImhvcml6b250YWxMaW5lIjpjYXNlImRhc2hlZEhvcml6b250YWxMaW5lIjprPQooeCx1LFt3
LngsdS5ncmlkU3RhcnRbMV1dLFtyWzBdLHUub3B0aW9ucy55XSk7YnJlYWs7Y2FzZSJ2ZXJ0aWNh
bExpbmUiOmNhc2U9CiJkYXNoZWRWZXJ0aWNhbExpbmUiOmsoeCx1LFt1LmdyaWRTdGFydFswXSx3
LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7Yz0KYXNlInJlY3RhbmdsZSI6ayh4LHUsW3Uu
Z3JpZFN0YXJ0WzBdLHcueV0sW3Uub3B0aW9ucy54LHJbMV1dKTticmVhaztkZWZhdWx0PQo6YnJl
YWt9eS5oaWdobGlnaHRPYmplY3RJbmRleD0zRHQ7bz0zRHRydWU7YnJlYWt9ZWxzZXtpZihwJiZ5
LmhpZ2hsaWdodE9iamU9CmN0SW5kZXghPTNEPTNEdCl7cT0zRHkuX3Rvb2x0aXBFbGVtO2lmKHUu
ZmFkZVRvb2x0aXApe3EuZmFkZU91dCh1LnRvb2x0aXBGYT0KZGVTcGVlZCl9ZWxzZXtxLmhpZGUo
KX1zd2l0Y2godS50eXBlKXtjYXNlImxpbmUiOmsoeCx1LFt3Lngsdy55XSxyKTticmVhaztjPQph
c2UiaG9yaXpvbnRhbExpbmUiOmNhc2UiZGFzaGVkSG9yaXpvbnRhbExpbmUiOmsoeCx1LFt3Lngs
dS5ncmlkU3RhcnRbMV1dLFs9CnJbMF0sdS5vcHRpb25zLnldKTticmVhaztjYXNlInZlcnRpY2Fs
TGluZSI6Y2FzZSJkYXNoZWRWZXJ0aWNhbExpbmUiOmsoeCx1LD0KW3UuZ3JpZFN0YXJ0WzBdLHcu
eV0sW3Uub3B0aW9ucy54LHJbMV1dKTticmVhaztjYXNlInJlY3RhbmdsZSI6ayh4LHUsW3UuZ3Jp
PQpkU3RhcnRbMF0sdy55XSxbdS5vcHRpb25zLngsclsxXV0pO2JyZWFrO2RlZmF1bHQ6YnJlYWt9
eS5oaWdobGlnaHRPYmplY3RJbmQ9CmV4PTNEdDtvPTNEdHJ1ZTticmVha31lbHNle2lmKHApe3N3
aXRjaCh1LnR5cGUpe2Nhc2UibGluZSI6ayh4LHUsW3cueCx3LnldLD0Kcik7YnJlYWs7Y2FzZSJo
b3Jpem9udGFsTGluZSI6Y2FzZSJkYXNoZWRIb3Jpem9udGFsTGluZSI6ayh4LHUsW3cueCx1Lmdy
aWRTPQp0YXJ0WzFdXSxbclswXSx1Lm9wdGlvbnMueV0pO2JyZWFrO2Nhc2UidmVydGljYWxMaW5l
IjpjYXNlImRhc2hlZFZlcnRpY2FsTGk9Cm5lIjprKHgsdSxbdS5ncmlkU3RhcnRbMF0sdy55XSxb
dS5vcHRpb25zLngsclsxXV0pO2JyZWFrO2Nhc2UicmVjdGFuZ2xlIjprKD0KeCx1LFt1LmdyaWRT
dGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7ZGVmYXVsdDpicmVha31vPTNE
dHJ1ZTtiPQpyZWFrfX19fX1pZighbyYmeS5oaWdobGlnaHRPYmplY3RJbmRleCE9M0Q9M0RudWxs
KXtxPTNEeS5fdG9vbHRpcEVsZW07dT0zRHk9Ci5nZXRPYmplY3QoeS5oaWdobGlnaHRPYmplY3RJ
bmRleCk7aWYodS5mYWRlVG9vbHRpcCl7cS5mYWRlT3V0KHUudG9vbHRpcEZhZD0KZVNwZWVkKX1l
bHNle3EuaGlkZSgpfXkuaGlnaGxpZ2h0T2JqZWN0SW5kZXg9M0RudWxsfX1kLmpxcGxvdC5wb3N0
SW5pdEhvb2tzPQoucHVzaChkLmpxcGxvdC5DYW52YXNPdmVybGF5LnBvc3RQbG90SW5pdCk7ZC5q
cXBsb3QucG9zdERyYXdIb29rcy5wdXNoKGQuanE9CnBsb3QuQ2FudmFzT3ZlcmxheS5wb3N0UGxv
dERyYXcpO2QuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TT0Kb3VzZU1v
dmUiLGFdKX0pKGpRdWVyeSk7LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENo
cmlzIExlb25lbGxvPQogfCBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hy
aXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihhKXthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXI9
M0RmdW5jdGlvbihiKXt0aGlzLmZvbnRTdHlsZT0KPTNEIm5vcm1hbCI7dGhpcy5mb250VmFyaWFu
dD0zRCJub3JtYWwiO3RoaXMuZm9udFdlaWdodD0zRCJub3JtYWwiO3RoaXMuZm9uPQp0U2l6ZT0z
RCIxMHB4Ijt0aGlzLmZvbnRGYW1pbHk9M0Qic2Fucy1zZXJpZiI7dGhpcy5mb250U3RyZXRjaD0z
RDE7dGhpcy5maWw9CmxTdHlsZT0zRCIjNjY2NjY2Ijt0aGlzLmFuZ2xlPTNEMDt0aGlzLnRleHRB
bGlnbj0zRCJzdGFydCI7dGhpcy50ZXh0QmFzZWxpbj0KZT0zRCJhbHBoYWJldGljIjt0aGlzLnRl
eHQ7dGhpcy53aWR0aDt0aGlzLmhlaWdodDt0aGlzLnB0MnB4PTNEMS4yODthLmV4dGVuPQpkKHRy
dWUsdGhpcyxiKTt0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZT0zRHRoaXMubm9ybWFsaXplRm9udFNp
emUodGhpcy5mb250U2k9CnplKTt0aGlzLnNldEhlaWdodCgpfTthLmpxcGxvdC5DYW52YXNUZXh0
UmVuZGVyZXIucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlvbj0KKGIpe2EuZXh0ZW5kKHRydWUsdGhp
cyxiKTt0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZT0zRHRoaXMubm9ybWFsaXplRm9udFNpemUoPQp0
aGlzLmZvbnRTaXplKTt0aGlzLnNldEhlaWdodCgpfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVy
ZXIucHJvdG90eXBlLm5vcm09CmFsaXplRm9udFNpemU9M0RmdW5jdGlvbihiKXtiPTNEU3RyaW5n
KGIpO3ZhciBjPTNEcGFyc2VGbG9hdChiKTtpZihiLmluZGV4Tz0KZigicHgiKT4tMSl7cmV0dXJu
IGMvdGhpcy5wdDJweH1lbHNle2lmKGIuaW5kZXhPZigicHQiKT4tMSl7cmV0dXJuIGN9ZWxzZXtp
PQpmKGIuaW5kZXhPZigiZW0iKT4tMSl7cmV0dXJuIGMqMTJ9ZWxzZXtpZihiLmluZGV4T2YoIiUi
KT4tMSl7cmV0dXJuIGMqMTIvMTA9CjB9ZWxzZXtyZXR1cm4gYy90aGlzLnB0MnB4fX19fX07YS5q
cXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5mb250Vz0KZWlnaHQyRmxvYXQ9M0Rm
dW5jdGlvbihiKXtpZihOdW1iZXIoYikpe3JldHVybiBiLzQwMH1lbHNle3N3aXRjaChiKXtjYXNl
Im5vPQpybWFsIjpyZXR1cm4gMTticmVhaztjYXNlImJvbGQiOnJldHVybiAxLjc1O2JyZWFrO2Nh
c2UiYm9sZGVyIjpyZXR1cm4gMi4yNTs9CmJyZWFrO2Nhc2UibGlnaHRlciI6cmV0dXJuIDAuNzU7
YnJlYWs7ZGVmYXVsdDpyZXR1cm4gMTticmVha319fTthLmpxcGxvdC5DYT0KbnZhc1RleHRSZW5k
ZXJlci5wcm90b3R5cGUuZ2V0VGV4dD0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH07YS5q
cXBsb3QuPQpDYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldFRleHQ9M0RmdW5jdGlvbihj
LGIpe3RoaXMudGV4dD0zRGM7dGhpcy5zZXQ9CldpZHRoKGIpO3JldHVybiB0aGlzfTthLmpxcGxv
dC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldFdpZHRoPTNEZnVuYz0KdGlvbihiKXty
ZXR1cm4gdGhpcy53aWR0aH07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5z
ZXRXaWR0aD0KPTNEZnVuY3Rpb24oYyxiKXtpZighYil7dGhpcy53aWR0aD0zRHRoaXMubWVhc3Vy
ZShjLHRoaXMudGV4dCl9ZWxzZXt0aGlzLndpPQpkdGg9M0RifXJldHVybiB0aGlzfTthLmpxcGxv
dC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmdldEhlaWdodD0zRGZ1bmM9CnRpb24oYil7
cmV0dXJuIHRoaXMuaGVpZ2h0fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBl
LnNldEhlaWdodD0KPTNEZnVuY3Rpb24oYil7aWYoIWIpe3RoaXMuaGVpZ2h0PTNEdGhpcy5ub3Jt
YWxpemVkRm9udFNpemUqdGhpcy5wdDJweH1lbHNlPQp7dGhpcy5oZWlnaHQ9M0RifXJldHVybiB0
aGlzfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxldHRlcj0KPTNEZnVu
Y3Rpb24oYil7cmV0dXJuIHRoaXMubGV0dGVyc1tiXX07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRl
cmVyLnByb3RvdHlwPQplLmFzY2VudD0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXpl
ZEZvbnRTaXplfTthLmpxcGxvdC5DYW52YXNUZXh0UmU9Cm5kZXJlci5wcm90b3R5cGUuZGVzY2Vu
dD0zRGZ1bmN0aW9uKCl7cmV0dXJuIDcqdGhpcy5ub3JtYWxpemVkRm9udFNpemUvMjV9Oz0KYS5q
cXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5tZWFzdXJlPTNEZnVuY3Rpb24oZCxn
KXt2YXIgZj0zRDA7dmFyPQogYj0zRGcubGVuZ3RoO2Zvcih2YXIgZT0zRDA7ZTxiO2UrKyl7dmFy
IGg9M0R0aGlzLmxldHRlcihnLmNoYXJBdChlKSk7aWYoaCk9CntmKz0zRGgud2lkdGgqdGhpcy5u
b3JtYWxpemVkRm9udFNpemUvMjUqdGhpcy5mb250U3RyZXRjaH19cmV0dXJuIGZ9O2EuanFwbD0K
b3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24ocyxuKXt2YXIg
cj0zRDA7dmFyIG89M0R0aGlzPQouaGVpZ2h0KjAuNzI7dmFyIHA9M0QwO3ZhciBsPTNEbi5sZW5n
dGg7dmFyIGs9M0R0aGlzLm5vcm1hbGl6ZWRGb250U2l6ZS8yNTs9CnMuc2F2ZSgpO3ZhciBoLGY7
aWYoKC1NYXRoLlBJLzI8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0QwKXx8KE1hdGguUEkq
Mz0KLzI8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjIpKXtoPTNEMDtmPTNE
LU1hdGguc2luKHRoaXMuYW5nbGUpPQoqdGhpcy53aWR0aH1lbHNle2lmKCgwPHRoaXMuYW5nbGUm
JnRoaXMuYW5nbGU8PTNETWF0aC5QSS8yKXx8KC1NYXRoLlBJKjI8PQo9M0R0aGlzLmFuZ2xlJiZ0
aGlzLmFuZ2xlPD0zRC1NYXRoLlBJKjMvMikpe2g9M0RNYXRoLnNpbih0aGlzLmFuZ2xlKSp0aGlz
Lmg9CmVpZ2h0O2Y9M0QwfWVsc2V7aWYoKC1NYXRoLlBJPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8
LU1hdGguUEkvMil8fChNYXRoLlBJPD0KPTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRo
LlBJKjMvMikpe2g9M0QtTWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy53PQppZHRoO2Y9M0QtTWF0
aC5zaW4odGhpcy5hbmdsZSkqdGhpcy53aWR0aC1NYXRoLmNvcyh0aGlzLmFuZ2xlKSp0aGlzLmhl
aWdodH09CmVsc2V7aWYoKC1NYXRoLlBJKjMvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPE1hdGgu
UEkpfHwoTWF0aC5QSS8yPHRoaXMuYW5nbD0KZSYmdGhpcy5hbmdsZTxNYXRoLlBJKSl7aD0zRE1h
dGguc2luKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0LU1hdGguY29zKHRoaXMuPQphbmdsZSkqdGhp
cy53aWR0aDtmPTNELU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0fX19fXMuc3Ryb2tl
U3R5bGU9M0Q9CnRoaXMuZmlsbFN0eWxlO3MuZmlsbFN0eWxlPTNEdGhpcy5maWxsU3R5bGU7cy50
cmFuc2xhdGUoaCxmKTtzLnJvdGF0ZSh0aGlzLj0KYW5nbGUpO3MubGluZUNhcD0zRCJyb3VuZCI7
dmFyIHQ9M0QodGhpcy5ub3JtYWxpemVkRm9udFNpemU+MzApPzI6MisoMzAtdGhpPQpzLm5vcm1h
bGl6ZWRGb250U2l6ZSkvMjA7cy5saW5lV2lkdGg9M0R0KmsqdGhpcy5mb250V2VpZ2h0MkZsb2F0
KHRoaXMuZm9udFc9CmVpZ2h0KTtmb3IodmFyIGc9M0QwO2c8bDtnKyspe3ZhciBtPTNEdGhpcy5s
ZXR0ZXIobi5jaGFyQXQoZykpO2lmKCFtKXtjb250aT0KbnVlfXMuYmVnaW5QYXRoKCk7dmFyIGU9
M0QxO3ZhciBiPTNEMDtmb3IodmFyIGQ9M0QwO2Q8bS5wb2ludHMubGVuZ3RoO2QrKyl7PQp2YXIg
cT0zRG0ucG9pbnRzW2RdO2lmKHFbMF09M0Q9M0QtMSYmcVsxXT0zRD0zRC0xKXtlPTNEMTtjb250
aW51ZX1pZihlKXtzLm09Cm92ZVRvKHIrcVswXSprKnRoaXMuZm9udFN0cmV0Y2gsby1xWzFdKmsp
O2U9M0RmYWxzZX1lbHNle3MubGluZVRvKHIrcVswXSprKj0KdGhpcy5mb250U3RyZXRjaCxvLXFb
MV0qayl9fXMuc3Ryb2tlKCk7cis9M0RtLndpZHRoKmsqdGhpcy5mb250U3RyZXRjaH1zLnJlPQpz
dG9yZSgpO3JldHVybiBwfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxl
dHRlcnM9M0R7IiAiOnt3aWQ9CnRoOjE2LHBvaW50czpbXX0sIiEiOnt3aWR0aDoxMCxwb2ludHM6
W1s1LDIxXSxbNSw3XSxbLTEsLTFdLFs1LDJdLFs0LDFdLFs1LD0KMF0sWzYsMV0sWzUsMl1dfSwn
Iic6e3dpZHRoOjE2LHBvaW50czpbWzQsMjFdLFs0LDE0XSxbLTEsLTFdLFsxMiwyMV0sWzEyLDE0
PQpdXX0sIiMiOnt3aWR0aDoyMSxwb2ludHM6W1sxMSwyNV0sWzQsLTddLFstMSwtMV0sWzE3LDI1
XSxbMTAsLTddLFstMSwtMV0sWzQ9CiwxMl0sWzE4LDEyXSxbLTEsLTFdLFszLDZdLFsxNyw2XV19
LCIkIjp7d2lkdGg6MjAscG9pbnRzOltbOCwyNV0sWzgsLTRdLFstMT0KLC0xXSxbMTIsMjVdLFsx
MiwtNF0sWy0xLC0xXSxbMTcsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV0sWzUsMjBdLFszLDE4
XSxbPQozLDE2XSxbNCwxNF0sWzUsMTNdLFs3LDEyXSxbMTMsMTBdLFsxNSw5XSxbMTYsOF0sWzE3
LDZdLFsxNywzXSxbMTUsMV0sWzEyLDA9Cl0sWzgsMF0sWzUsMV0sWzMsM11dfSwiJSI6e3dpZHRo
OjI0LHBvaW50czpbWzIxLDIxXSxbMywwXSxbLTEsLTFdLFs4LDIxXSxbMT0KMCwxOV0sWzEwLDE3
XSxbOSwxNV0sWzcsMTRdLFs1LDE0XSxbMywxNl0sWzMsMThdLFs0LDIwXSxbNiwyMV0sWzgsMjFd
LFsxMCwyPQowXSxbMTMsMTldLFsxNiwxOV0sWzE5LDIwXSxbMjEsMjFdLFstMSwtMV0sWzE3LDdd
LFsxNSw2XSxbMTQsNF0sWzE0LDJdLFsxNiw9CjBdLFsxOCwwXSxbMjAsMV0sWzIxLDNdLFsyMSw1
XSxbMTksN10sWzE3LDddXX0sIiYiOnt3aWR0aDoyNixwb2ludHM6W1syMywxMj0KXSxbMjMsMTNd
LFsyMiwxNF0sWzIxLDE0XSxbMjAsMTNdLFsxOSwxMV0sWzE3LDZdLFsxNSwzXSxbMTMsMV0sWzEx
LDBdLFs3LDBdPQosWzUsMV0sWzQsMl0sWzMsNF0sWzMsNl0sWzQsOF0sWzUsOV0sWzEyLDEzXSxb
MTMsMTRdLFsxNCwxNl0sWzE0LDE4XSxbMTMsMjA9Cl0sWzExLDIxXSxbOSwyMF0sWzgsMThdLFs4
LDE2XSxbOSwxM10sWzExLDEwXSxbMTYsM10sWzE4LDFdLFsyMCwwXSxbMjIsMF0sWz0KMjMsMV0s
WzIzLDJdXX0sIiciOnt3aWR0aDoxMCxwb2ludHM6W1s1LDE5XSxbNCwyMF0sWzUsMjFdLFs2LDIw
XSxbNiwxOF0sWzUsPQoxNl0sWzQsMTVdXX0sIigiOnt3aWR0aDoxNCxwb2ludHM6W1sxMSwyNV0s
WzksMjNdLFs3LDIwXSxbNSwxNl0sWzQsMTFdLFs0LDc9Cl0sWzUsMl0sWzcsLTJdLFs5LC01XSxb
MTEsLTddXX0sIikiOnt3aWR0aDoxNCxwb2ludHM6W1szLDI1XSxbNSwyM10sWzcsMjBdLD0KWzks
MTZdLFsxMCwxMV0sWzEwLDddLFs5LDJdLFs3LC0yXSxbNSwtNV0sWzMsLTddXX0sIioiOnt3aWR0
aDoxNixwb2ludHM6W1s4PQosMjFdLFs4LDldLFstMSwtMV0sWzMsMThdLFsxMywxMl0sWy0xLC0x
XSxbMTMsMThdLFszLDEyXV19LCIrIjp7d2lkdGg6MjYscG89CmludHM6W1sxMywxOF0sWzEzLDBd
LFstMSwtMV0sWzQsOV0sWzIyLDldXX0sIiwiOnt3aWR0aDoxMCxwb2ludHM6W1s2LDFdLFs1LD0K
MF0sWzQsMV0sWzUsMl0sWzYsMV0sWzYsLTFdLFs1LC0zXSxbNCwtNF1dfSwiLSI6e3dpZHRoOjE4
LHBvaW50czpbWzYsOV0sWzEyPQosOV1dfSwiLiI6e3dpZHRoOjEwLHBvaW50czpbWzUsMl0sWzQs
MV0sWzUsMF0sWzYsMV0sWzUsMl1dfSwiLyI6e3dpZHRoOjIyLHA9Cm9pbnRzOltbMjAsMjVdLFsy
LC03XV19LCIwIjp7d2lkdGg6MjAscG9pbnRzOltbOSwyMV0sWzYsMjBdLFs0LDE3XSxbMywxMl0s
Wz0KMyw5XSxbNCw0XSxbNiwxXSxbOSwwXSxbMTEsMF0sWzE0LDFdLFsxNiw0XSxbMTcsOV0sWzE3
LDEyXSxbMTYsMTddLFsxNCwyMF0sPQpbMTEsMjFdLFs5LDIxXV19LCIxIjp7d2lkdGg6MjAscG9p
bnRzOltbNiwxN10sWzgsMThdLFsxMSwyMV0sWzExLDBdXX0sIjIiOns9CndpZHRoOjIwLHBvaW50
czpbWzQsMTZdLFs0LDE3XSxbNSwxOV0sWzYsMjBdLFs4LDIxXSxbMTIsMjFdLFsxNCwyMF0sWzE1
LDE5XT0KLFsxNiwxN10sWzE2LDE1XSxbMTUsMTNdLFsxMywxMF0sWzMsMF0sWzE3LDBdXX0sIjMi
Ont3aWR0aDoyMCxwb2ludHM6W1s1LDIxPQpdLFsxNiwyMV0sWzEwLDEzXSxbMTMsMTNdLFsxNSwx
Ml0sWzE2LDExXSxbMTcsOF0sWzE3LDZdLFsxNiwzXSxbMTQsMV0sWzExLDA9Cl0sWzgsMF0sWzUs
MV0sWzQsMl0sWzMsNF1dfSwiNCI6e3dpZHRoOjIwLHBvaW50czpbWzEzLDIxXSxbMyw3XSxbMTgs
N10sWy0xLD0KLTFdLFsxMywyMV0sWzEzLDBdXX0sIjUiOnt3aWR0aDoyMCxwb2ludHM6W1sxNSwy
MV0sWzUsMjFdLFs0LDEyXSxbNSwxM10sWzgsPQoxNF0sWzExLDE0XSxbMTQsMTNdLFsxNiwxMV0s
WzE3LDhdLFsxNyw2XSxbMTYsM10sWzE0LDFdLFsxMSwwXSxbOCwwXSxbNSwxXSw9Cls0LDJdLFsz
LDRdXX0sIjYiOnt3aWR0aDoyMCxwb2ludHM6W1sxNiwxOF0sWzE1LDIwXSxbMTIsMjFdLFsxMCwy
MV0sWzcsMjBdLD0KWzUsMTddLFs0LDEyXSxbNCw3XSxbNSwzXSxbNywxXSxbMTAsMF0sWzExLDBd
LFsxNCwxXSxbMTYsM10sWzE3LDZdLFsxNyw3XSxbPQoxNiwxMF0sWzE0LDEyXSxbMTEsMTNdLFsx
MCwxM10sWzcsMTJdLFs1LDEwXSxbNCw3XV19LCI3Ijp7d2lkdGg6MjAscG9pbnRzOls9ClsxNywy
MV0sWzcsMF0sWy0xLC0xXSxbMywyMV0sWzE3LDIxXV19LCI4Ijp7d2lkdGg6MjAscG9pbnRzOltb
OCwyMV0sWzUsMjBdLD0KWzQsMThdLFs0LDE2XSxbNSwxNF0sWzcsMTNdLFsxMSwxMl0sWzE0LDEx
XSxbMTYsOV0sWzE3LDddLFsxNyw0XSxbMTYsMl0sWzE1PQosMV0sWzEyLDBdLFs4LDBdLFs1LDFd
LFs0LDJdLFszLDRdLFszLDddLFs0LDldLFs2LDExXSxbOSwxMl0sWzEzLDEzXSxbMTUsMTQ9Cl0s
WzE2LDE2XSxbMTYsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV1dfSwiOSI6e3dpZHRoOjIwLHBv
aW50czpbWzE2LDE0XSxbMT0KNSwxMV0sWzEzLDldLFsxMCw4XSxbOSw4XSxbNiw5XSxbNCwxMV0s
WzMsMTRdLFszLDE1XSxbNCwxOF0sWzYsMjBdLFs5LDIxXSxbPQoxMCwyMV0sWzEzLDIwXSxbMTUs
MThdLFsxNiwxNF0sWzE2LDldLFsxNSw0XSxbMTMsMV0sWzEwLDBdLFs4LDBdLFs1LDFdLFs0LDM9
Cl1dfSwiOiI6e3dpZHRoOjEwLHBvaW50czpbWzUsMTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdLFs1
LDE0XSxbLTEsLTFdLFs1LDJdLD0KWzQsMV0sWzUsMF0sWzYsMV0sWzUsMl1dfSwiOyI6e3dpZHRo
OjEwLHBvaW50czpbWzUsMTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdPQosWzUsMTRdLFstMSwtMV0s
WzYsMV0sWzUsMF0sWzQsMV0sWzUsMl0sWzYsMV0sWzYsLTFdLFs1LC0zXSxbNCwtNF1dfSwiPCI6
e3c9CmlkdGg6MjQscG9pbnRzOltbMjAsMThdLFs0LDldLFsyMCwwXV19LCI9M0QiOnt3aWR0aDoy
Nixwb2ludHM6W1s0LDEyXSxbMjIsMT0KMl0sWy0xLC0xXSxbNCw2XSxbMjIsNl1dfSwiPiI6e3dp
ZHRoOjI0LHBvaW50czpbWzQsMThdLFsyMCw5XSxbNCwwXV19LCI/Ijp7PQp3aWR0aDoxOCxwb2lu
dHM6W1szLDE2XSxbMywxN10sWzQsMTldLFs1LDIwXSxbNywyMV0sWzExLDIxXSxbMTMsMjBdLFsx
NCwxOV09CixbMTUsMTddLFsxNSwxNV0sWzE0LDEzXSxbMTMsMTJdLFs5LDEwXSxbOSw3XSxbLTEs
LTFdLFs5LDJdLFs4LDFdLFs5LDBdLFsxMD0KLDFdLFs5LDJdXX0sIkAiOnt3aWR0aDoyNyxwb2lu
dHM6W1sxOCwxM10sWzE3LDE1XSxbMTUsMTZdLFsxMiwxNl0sWzEwLDE1XSxbPQo5LDE0XSxbOCwx
MV0sWzgsOF0sWzksNl0sWzExLDVdLFsxNCw1XSxbMTYsNl0sWzE3LDhdLFstMSwtMV0sWzEyLDE2
XSxbMTAsMTQ9Cl0sWzksMTFdLFs5LDhdLFsxMCw2XSxbMTEsNV0sWy0xLC0xXSxbMTgsMTZdLFsx
Nyw4XSxbMTcsNl0sWzE5LDVdLFsyMSw1XSxbMj0KMyw3XSxbMjQsMTBdLFsyNCwxMl0sWzIzLDE1
XSxbMjIsMTddLFsyMCwxOV0sWzE4LDIwXSxbMTUsMjFdLFsxMiwyMV0sWzksMjBdPQosWzcsMTld
LFs1LDE3XSxbNCwxNV0sWzMsMTJdLFszLDldLFs0LDZdLFs1LDRdLFs3LDJdLFs5LDFdLFsxMiww
XSxbMTUsMF0sWzE9CjgsMV0sWzIwLDJdLFsyMSwzXSxbLTEsLTFdLFsxOSwxNl0sWzE4LDhdLFsx
OCw2XSxbMTksNV1dfSxBOnt3aWR0aDoxOCxwb2ludD0KczpbWzksMjFdLFsxLDBdLFstMSwtMV0s
WzksMjFdLFsxNywwXSxbLTEsLTFdLFs0LDddLFsxNCw3XV19LEI6e3dpZHRoOjIxLHBvPQppbnRz
OltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzEzLDIxXSxbMTYsMjBdLFsxNywxOV0sWzE4
LDE3XSxbMTgsMTVdLFs9CjE3LDEzXSxbMTYsMTJdLFsxMywxMV0sWy0xLC0xXSxbNCwxMV0sWzEz
LDExXSxbMTYsMTBdLFsxNyw5XSxbMTgsN10sWzE4LDRdLD0KWzE3LDJdLFsxNiwxXSxbMTMsMF0s
WzQsMF1dfSxDOnt3aWR0aDoyMSxwb2ludHM6W1sxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxPQoz
LDIxXSxbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNd
LFs3LDFdLFs5LDBdLFsxMyw9CjBdLFsxNSwxXSxbMTcsM10sWzE4LDVdXX0sRDp7d2lkdGg6MjEs
cG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWz0KMTEsMjFdLFsxNCwyMF0sWzE2
LDE4XSxbMTcsMTZdLFsxOCwxM10sWzE4LDhdLFsxNyw1XSxbMTYsM10sWzE0LDFdLFsxMSwwXSxb
PQo0LDBdXX0sRTp7d2lkdGg6MTkscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0s
WzE3LDIxXSxbLTEsLTFdLFs0LDE9CjFdLFsxMiwxMV0sWy0xLC0xXSxbNCwwXSxbMTcsMF1dfSxG
Ont3aWR0aDoxOCxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLD0KWzQsMjFdLFsxNywyMV0s
Wy0xLC0xXSxbNCwxMV0sWzEyLDExXV19LEc6e3dpZHRoOjIxLHBvaW50czpbWzE4LDE2XSxbMTcs
MThdPQosWzE1LDIwXSxbMTMsMjFdLFs5LDIxXSxbNywyMF0sWzUsMThdLFs0LDE2XSxbMywxM10s
WzMsOF0sWzQsNV0sWzUsM10sWzcsMV09CixbOSwwXSxbMTMsMF0sWzE1LDFdLFsxNywzXSxbMTgs
NV0sWzE4LDhdLFstMSwtMV0sWzEzLDhdLFsxOCw4XV19LEg6e3dpZHRoOj0KMjIscG9pbnRzOltb
NCwyMV0sWzQsMF0sWy0xLC0xXSxbMTgsMjFdLFsxOCwwXSxbLTEsLTFdLFs0LDExXSxbMTgsMTFd
XX0sSTp7PQp3aWR0aDo4LHBvaW50czpbWzQsMjFdLFs0LDBdXX0sSjp7d2lkdGg6MTYscG9pbnRz
OltbMTIsMjFdLFsxMiw1XSxbMTEsMl0sWzE9CjAsMV0sWzgsMF0sWzYsMF0sWzQsMV0sWzMsMl0s
WzIsNV0sWzIsN11dfSxLOnt3aWR0aDoyMSxwb2ludHM6W1s0LDIxXSxbNCwwXT0KLFstMSwtMV0s
WzE4LDIxXSxbNCw3XSxbLTEsLTFdLFs5LDEyXSxbMTgsMF1dfSxMOnt3aWR0aDoxNyxwb2ludHM6
W1s0LDIxXSxbPQo0LDBdLFstMSwtMV0sWzQsMF0sWzE2LDBdXX0sTTp7d2lkdGg6MjQscG9pbnRz
OltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV09CixbMTIsMF0sWy0xLC0xXSxbMjAsMjFdLFsx
MiwwXSxbLTEsLTFdLFsyMCwyMV0sWzIwLDBdXX0sTjp7d2lkdGg6MjIscG9pbnRzOj0KW1s0LDIx
XSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTgsMF0sWy0xLC0xXSxbMTgsMjFdLFsxOCwwXV19LE86
e3dpZHRoOjIyLHBvPQppbnRzOltbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFsz
LDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsxMyw9CjBdLFsxNSwxXSxbMTcsM10sWzE4LDVd
LFsxOSw4XSxbMTksMTNdLFsxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxMywyMV0sWzksMj0KMV1d
fSxQOnt3aWR0aDoyMSxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTMsMjFd
LFsxNiwyMF0sWzE3LDE5PQpdLFsxOCwxN10sWzE4LDE0XSxbMTcsMTJdLFsxNiwxMV0sWzEzLDEw
XSxbNCwxMF1dfSxROnt3aWR0aDoyMixwb2ludHM6W1s5LDI9CjFdLFs3LDIwXSxbNSwxOF0sWzQs
MTZdLFszLDEzXSxbMyw4XSxbNCw1XSxbNSwzXSxbNywxXSxbOSwwXSxbMTMsMF0sWzE1LDFdLD0K
WzE3LDNdLFsxOCw1XSxbMTksOF0sWzE5LDEzXSxbMTgsMTZdLFsxNywxOF0sWzE1LDIwXSxbMTMs
MjFdLFs5LDIxXSxbLTEsLTFdPQosWzEyLDRdLFsxOCwtMl1dfSxSOnt3aWR0aDoyMSxwb2ludHM6
W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTMsMjFdLFs9CjE2LDIwXSxbMTcsMTldLFsx
OCwxN10sWzE4LDE1XSxbMTcsMTNdLFsxNiwxMl0sWzEzLDExXSxbNCwxMV0sWy0xLC0xXSxbMTEs
MT0KMV0sWzE4LDBdXX0sUzp7d2lkdGg6MjAscG9pbnRzOltbMTcsMThdLFsxNSwyMF0sWzEyLDIx
XSxbOCwyMV0sWzUsMjBdLFszLDE4PQpdLFszLDE2XSxbNCwxNF0sWzUsMTNdLFs3LDEyXSxbMTMs
MTBdLFsxNSw5XSxbMTYsOF0sWzE3LDZdLFsxNywzXSxbMTUsMV0sWzE9CjIsMF0sWzgsMF0sWzUs
MV0sWzMsM11dfSxUOnt3aWR0aDoxNixwb2ludHM6W1s4LDIxXSxbOCwwXSxbLTEsLTFdLFsxLDIx
XSxbMT0KNSwyMV1dfSxVOnt3aWR0aDoyMixwb2ludHM6W1s0LDIxXSxbNCw2XSxbNSwzXSxbNywx
XSxbMTAsMF0sWzEyLDBdLFsxNSwxXSxbPQoxNywzXSxbMTgsNl0sWzE4LDIxXV19LFY6e3dpZHRo
OjE4LHBvaW50czpbWzEsMjFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSw9CjBdXX0sVzp7d2lk
dGg6MjQscG9pbnRzOltbMiwyMV0sWzcsMF0sWy0xLC0xXSxbMTIsMjFdLFs3LDBdLFstMSwtMV0s
WzEyLDIxXT0KLFsxNywwXSxbLTEsLTFdLFsyMiwyMV0sWzE3LDBdXX0sWDp7d2lkdGg6MjAscG9p
bnRzOltbMywyMV0sWzE3LDBdLFstMSwtMV0sPQpbMTcsMjFdLFszLDBdXX0sWTp7d2lkdGg6MTgs
cG9pbnRzOltbMSwyMV0sWzksMTFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSw9CjExXV19LFo6
e3dpZHRoOjIwLHBvaW50czpbWzE3LDIxXSxbMywwXSxbLTEsLTFdLFszLDIxXSxbMTcsMjFdLFst
MSwtMV0sWzMsMD0KXSxbMTcsMF1dfSwiWyI6e3dpZHRoOjE0LHBvaW50czpbWzQsMjVdLFs0LC03
XSxbLTEsLTFdLFs1LDI1XSxbNSwtN10sWy0xLC0xPQpdLFs0LDI1XSxbMTEsMjVdLFstMSwtMV0s
WzQsLTddLFsxMSwtN11dfSwiXFwiOnt3aWR0aDoxNCxwb2ludHM6W1swLDIxXSxbMTQ9CiwtM11d
fSwiXSI6e3dpZHRoOjE0LHBvaW50czpbWzksMjVdLFs5LC03XSxbLTEsLTFdLFsxMCwyNV0sWzEw
LC03XSxbLTEsLTFdLD0KWzMsMjVdLFsxMCwyNV0sWy0xLC0xXSxbMywtN10sWzEwLC03XV19LCJe
Ijp7d2lkdGg6MTYscG9pbnRzOltbNiwxNV0sWzgsMThdPQosWzEwLDE1XSxbLTEsLTFdLFszLDEy
XSxbOCwxN10sWzEzLDEyXSxbLTEsLTFdLFs4LDE3XSxbOCwwXV19LF86e3dpZHRoOjE2LHA9Cm9p
bnRzOltbMCwtMl0sWzE2LC0yXV19LCJgIjp7d2lkdGg6MTAscG9pbnRzOltbNiwyMV0sWzUsMjBd
LFs0LDE4XSxbNCwxNl0sWz0KNSwxNV0sWzYsMTZdLFs1LDE3XV19LGE6e3dpZHRoOjE5LHBvaW50
czpbWzE1LDE0XSxbMTUsMF0sWy0xLC0xXSxbMTUsMTFdLFsxPQozLDEzXSxbMTEsMTRdLFs4LDE0
XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTM9
CiwxXSxbMTUsM11dfSxiOnt3aWR0aDoxOSxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0
LDExXSxbNiwxM10sWzgsMTRdLD0KWzExLDE0XSxbMTMsMTNdLFsxNSwxMV0sWzE2LDhdLFsxNiw2
XSxbMTUsM10sWzEzLDFdLFsxMSwwXSxbOCwwXSxbNiwxXSxbNCwzPQpdXX0sYzp7d2lkdGg6MTgs
cG9pbnRzOltbMTUsMTFdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4
XSw9ClszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0sZDp7d2lk
dGg6MTkscG9pbnRzOltbMTUsMjFdLD0KWzE1LDBdLFstMSwtMV0sWzE1LDExXSxbMTMsMTNdLFsx
MSwxNF0sWzgsMTRdLFs2LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsPQozXSxbNiwxXSxbOCww
XSxbMTEsMF0sWzEzLDFdLFsxNSwzXV19LGU6e3dpZHRoOjE4LHBvaW50czpbWzMsOF0sWzE1LDhd
LFsxNSw9CjEwXSxbMTQsMTJdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxb
Myw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOD0KLDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0sZjp7
d2lkdGg6MTIscG9pbnRzOltbMTAsMjFdLFs4LDIxXSxbNiwyMF0sWzUsMTddPQosWzUsMF0sWy0x
LC0xXSxbMiwxNF0sWzksMTRdXX0sZzp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtMl0s
WzE0LC01XSw9ClsxMywtNl0sWzExLC03XSxbOCwtN10sWzYsLTZdLFstMSwtMV0sWzE1LDExXSxb
MTMsMTNdLFsxMSwxNF0sWzgsMTRdLFs2LDEzXT0KLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxb
NiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFdLFsxNSwzXV19LGg6e3dpZHRoOjE5LHBvPQppbnRzOltb
NCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10s
WzE1LDEwXSxbMTU9CiwwXV19LGk6e3dpZHRoOjgscG9pbnRzOltbMywyMV0sWzQsMjBdLFs1LDIx
XSxbNCwyMl0sWzMsMjFdLFstMSwtMV0sWzQsMTRdLD0KWzQsMF1dfSxqOnt3aWR0aDoxMCxwb2lu
dHM6W1s1LDIxXSxbNiwyMF0sWzcsMjFdLFs2LDIyXSxbNSwyMV0sWy0xLC0xXSxbNiwxPQo0XSxb
NiwtM10sWzUsLTZdLFszLC03XSxbMSwtN11dfSxrOnt3aWR0aDoxNyxwb2ludHM6W1s0LDIxXSxb
NCwwXSxbLTEsLTFdLFs9CjE0LDE0XSxbNCw0XSxbLTEsLTFdLFs4LDhdLFsxNSwwXV19LGw6e3dp
ZHRoOjgscG9pbnRzOltbNCwyMV0sWzQsMF1dfSxtOnt3aT0KZHRoOjMwLHBvaW50czpbWzQsMTRd
LFs0LDBdLFstMSwtMV0sWzQsMTBdLFs3LDEzXSxbOSwxNF0sWzEyLDE0XSxbMTQsMTNdLFsxPQo1
LDEwXSxbMTUsMF0sWy0xLC0xXSxbMTUsMTBdLFsxOCwxM10sWzIwLDE0XSxbMjMsMTRdLFsyNSwx
M10sWzI2LDEwXSxbMjYsMF09Cl19LG46e3dpZHRoOjE5LHBvaW50czpbWzQsMTRdLFs0LDBdLFst
MSwtMV0sWzQsMTBdLFs3LDEzXSxbOSwxNF0sWzEyLDE0XSxbMT0KNCwxM10sWzE1LDEwXSxbMTUs
MF1dfSxvOnt3aWR0aDoxOSxwb2ludHM6W1s4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZd
PQosWzQsM10sWzYsMV0sWzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM10sWzE2LDZdLFsxNiw4XSxb
MTUsMTFdLFsxMywxM10sWzExLDE9CjRdLFs4LDE0XV19LHA6e3dpZHRoOjE5LHBvaW50czpbWzQs
MTRdLFs0LC03XSxbLTEsLTFdLFs0LDExXSxbNiwxM10sWzgsMTRdLD0KWzExLDE0XSxbMTMsMTNd
LFsxNSwxMV0sWzE2LDhdLFsxNiw2XSxbMTUsM10sWzEzLDFdLFsxMSwwXSxbOCwwXSxbNiwxXSxb
NCwzPQpdXX0scTp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtN10sWy0xLC0xXSxbMTUs
MTFdLFsxMywxM10sWzExLDE0XSxbOCw9CjE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0
LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0scjp7dz0KaWR0aDoxMyxwb2lu
dHM6W1s0LDE0XSxbNCwwXSxbLTEsLTFdLFs0LDhdLFs1LDExXSxbNywxM10sWzksMTRdLFsxMiwx
NF1dfSxzPQo6e3dpZHRoOjE3LHBvaW50czpbWzE0LDExXSxbMTMsMTNdLFsxMCwxNF0sWzcsMTRd
LFs0LDEzXSxbMywxMV0sWzQsOV0sWzYsOF09CixbMTEsN10sWzEzLDZdLFsxNCw0XSxbMTQsM10s
WzEzLDFdLFsxMCwwXSxbNywwXSxbNCwxXSxbMywzXV19LHQ6e3dpZHRoOjEyLD0KcG9pbnRzOltb
NSwyMV0sWzUsNF0sWzYsMV0sWzgsMF0sWzEwLDBdLFstMSwtMV0sWzIsMTRdLFs5LDE0XV19LHU6
e3dpZHRoOjE5PQoscG9pbnRzOltbNCwxNF0sWzQsNF0sWzUsMV0sWzcsMF0sWzEwLDBdLFsxMiwx
XSxbMTUsNF0sWy0xLC0xXSxbMTUsMTRdLFsxNSw9CjBdXX0sdjp7d2lkdGg6MTYscG9pbnRzOltb
MiwxNF0sWzgsMF0sWy0xLC0xXSxbMTQsMTRdLFs4LDBdXX0sdzp7d2lkdGg6MjIscD0Kb2ludHM6
W1szLDE0XSxbNywwXSxbLTEsLTFdLFsxMSwxNF0sWzcsMF0sWy0xLC0xXSxbMTEsMTRdLFsxNSww
XSxbLTEsLTFdLFsxPQo5LDE0XSxbMTUsMF1dfSx4Ont3aWR0aDoxNyxwb2ludHM6W1szLDE0XSxb
MTQsMF0sWy0xLC0xXSxbMTQsMTRdLFszLDBdXX0seTo9Cnt3aWR0aDoxNixwb2ludHM6W1syLDE0
XSxbOCwwXSxbLTEsLTFdLFsxNCwxNF0sWzgsMF0sWzYsLTRdLFs0LC02XSxbMiwtN10sWz0KMSwt
N11dfSx6Ont3aWR0aDoxNyxwb2ludHM6W1sxNCwxNF0sWzMsMF0sWy0xLC0xXSxbMywxNF0sWzE0
LDE0XSxbLTEsLTFdLFszPQosMF0sWzE0LDBdXX0sInsiOnt3aWR0aDoxNCxwb2ludHM6W1s5LDI1
XSxbNywyNF0sWzYsMjNdLFs1LDIxXSxbNSwxOV0sWzYsMTc9Cl0sWzcsMTZdLFs4LDE0XSxbOCwx
Ml0sWzYsMTBdLFstMSwtMV0sWzcsMjRdLFs2LDIyXSxbNiwyMF0sWzcsMThdLFs4LDE3XSxbOT0K
LDE1XSxbOSwxM10sWzgsMTFdLFs0LDldLFs4LDddLFs5LDVdLFs5LDNdLFs4LDFdLFs3LDBdLFs2
LC0yXSxbNiwtNF0sWzcsLTZdPQosWy0xLC0xXSxbNiw4XSxbOCw2XSxbOCw0XSxbNywyXSxbNiwx
XSxbNSwtMV0sWzUsLTNdLFs2LC01XSxbNywtNl0sWzksLTddXX09CiwifCI6e3dpZHRoOjgscG9p
bnRzOltbNCwyNV0sWzQsLTddXX0sIn0iOnt3aWR0aDoxNCxwb2ludHM6W1s1LDI1XSxbNywyNF0s
Wz0KOCwyM10sWzksMjFdLFs5LDE5XSxbOCwxN10sWzcsMTZdLFs2LDE0XSxbNiwxMl0sWzgsMTBd
LFstMSwtMV0sWzcsMjRdLFs4LDIyPQpdLFs4LDIwXSxbNywxOF0sWzYsMTddLFs1LDE1XSxbNSwx
M10sWzYsMTFdLFsxMCw5XSxbNiw3XSxbNSw1XSxbNSwzXSxbNiwxXSw9Cls3LDBdLFs4LC0yXSxb
OCwtNF0sWzcsLTZdLFstMSwtMV0sWzgsOF0sWzYsNl0sWzYsNF0sWzcsMl0sWzgsMV0sWzksLTFd
LFs5LD0KLTNdLFs4LC01XSxbNywtNl0sWzUsLTddXX0sIn4iOnt3aWR0aDoyNCxwb2ludHM6W1sz
LDZdLFszLDhdLFs0LDExXSxbNiwxMl0sPQpbOCwxMl0sWzEwLDExXSxbMTQsOF0sWzE2LDddLFsx
OCw3XSxbMjAsOF0sWzIxLDEwXSxbLTEsLTFdLFszLDhdLFs0LDEwXSxbNiw9CjExXSxbOCwxMV0s
WzEwLDEwXSxbMTQsN10sWzE2LDZdLFsxOCw2XSxbMjAsN10sWzIxLDEwXSxbMjEsMTJdXX19O2Eu
anFwbG90Lj0KQ2FudmFzRm9udFJlbmRlcmVyPTNEZnVuY3Rpb24oYil7Yj0zRGJ8fHt9O2lmKCFi
LnB0MnB4KXtiLnB0MnB4PTNEMS41fWEuanFwPQpsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLmNhbGwo
dGhpcyxiKX07YS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwZT0KPTNEbmV3IGEu
anFwbG90LkNhbnZhc1RleHRSZW5kZXJlcih7fSk7YS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVy
LnByb3RvdHlwPQplLmNvbnN0cnVjdG9yPTNEYS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyO2Eu
anFwbG90LkNhbnZhc0ZvbnRSZW5kZXJlci5wcm89CnRvdHlwZS5tZWFzdXJlPTNEZnVuY3Rpb24o
YyxlKXt2YXIgZD0zRHRoaXMuZm9udFNpemUrIiAiK3RoaXMuZm9udEZhbWlseTtjLj0Kc2F2ZSgp
O2MuZm9udD0zRGQ7dmFyIGI9M0RjLm1lYXN1cmVUZXh0KGUpLndpZHRoO2MucmVzdG9yZSgpO3Jl
dHVybiBifTthLmpxPQpwbG90LkNhbnZhc0ZvbnRSZW5kZXJlci5wcm90b3R5cGUuZHJhdz0zRGZ1
bmN0aW9uKGUsZyl7dmFyIGM9M0QwO3ZhciBoPTNEdGg9CmlzLmhlaWdodCowLjcyO2Uuc2F2ZSgp
O3ZhciBkLGI7aWYoKC1NYXRoLlBJLzI8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9Cj0zRDAp
fHwoTWF0aC5QSSozLzI8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjIpKXtk
PTNEMDtiPTNELU1hdD0KaC5zaW4odGhpcy5hbmdsZSkqdGhpcy53aWR0aH1lbHNle2lmKCgwPHRo
aXMuYW5nbGUmJnRoaXMuYW5nbGU8PTNETWF0aC5QSS8yPQopfHwoLU1hdGguUEkqMjw9M0R0aGlz
LmFuZ2xlJiZ0aGlzLmFuZ2xlPD0zRC1NYXRoLlBJKjMvMikpe2Q9M0RNYXRoLnNpbih0aGk9CnMu
YW5nbGUpKnRoaXMuaGVpZ2h0O2I9M0QwfWVsc2V7aWYoKC1NYXRoLlBJPHRoaXMuYW5nbGUmJnRo
aXMuYW5nbGU8LU1hdGguUD0KSS8yKXx8KE1hdGguUEk8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmds
ZTw9M0RNYXRoLlBJKjMvMikpe2Q9M0QtTWF0aC5jb3ModGhpPQpzLmFuZ2xlKSp0aGlzLndpZHRo
O2I9M0QtTWF0aC5zaW4odGhpcy5hbmdsZSkqdGhpcy53aWR0aC1NYXRoLmNvcyh0aGlzLmFuZ2w9
CmUpKnRoaXMuaGVpZ2h0fWVsc2V7aWYoKC1NYXRoLlBJKjMvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFu
Z2xlPE1hdGguUEkpfHwoTWF0aD0KLlBJLzI8dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTxNYXRoLlBJ
KSl7ZD0zRE1hdGguc2luKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0PQotTWF0aC5jb3ModGhpcy5h
bmdsZSkqdGhpcy53aWR0aDtiPTNELU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0fX19
fWU9Ci5zdHJva2VTdHlsZT0zRHRoaXMuZmlsbFN0eWxlO2UuZmlsbFN0eWxlPTNEdGhpcy5maWxs
U3R5bGU7dmFyIGY9M0R0aGlzLmZvbj0KdFNpemUrIiAiK3RoaXMuZm9udEZhbWlseTtlLmZvbnQ9
M0RmO2UudHJhbnNsYXRlKGQsYik7ZS5yb3RhdGUodGhpcy5hbmdsZSk7PQplLmZpbGxUZXh0KGcs
YyxoKTtlLnJlc3RvcmUoKX19KShqUXVlcnkpOy8qIGpxUGxvdCAxLjAuOHIxMjUwIHwgKGMpIDIw
MDktMjA9CjEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCisgICBqc0RhdGUgfCAoYykgMjAx
MC0yMDEzIENocmlzIExlb25lbGxvCisgKi8oZnVuY3Rpb24oYSl7YS5qcXBsb3QuQ2F0ZWdvcnlB
eGlzUmVuZGVyZXI9M0RmdW5jdGlvbihiKXthLmpxcGxvdC5MaW5lYT0KckF4aXNSZW5kZXJlci5j
YWxsKHRoaXMpO3RoaXMuc29ydE1lcmdlZExhYmVscz0zRGZhbHNlfTthLmpxcGxvdC5DYXRlZ29y
eUF4PQppc1JlbmRlcmVyLnByb3RvdHlwZT0zRG5ldyBhLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVy
ZXIoKTthLmpxcGxvdC5DYXRlZ29yeUE9Cnhpc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
cj0zRGEuanFwbG90LkNhdGVnb3J5QXhpc1JlbmRlcmVyO2EuanFwbG90Lj0KQ2F0ZWdvcnlBeGlz
UmVuZGVyZXIucHJvdG90eXBlLmluaXQ9M0RmdW5jdGlvbihlKXt0aGlzLmdyb3Vwcz0zRDE7dGhp
cy5ncm91PQpwTGFiZWxzPTNEW107dGhpcy5fZ3JvdXBMYWJlbHM9M0RbXTt0aGlzLl9ncm91cGVk
PTNEZmFsc2U7dGhpcy5fYmFyc1Blckdyb3U9CnA9M0RudWxsO3RoaXMucmV2ZXJzZT0zRGZhbHNl
O2EuZXh0ZW5kKHRydWUsdGhpcyx7dGlja09wdGlvbnM6e2Zvcm1hdFN0cmluZz0KOiIlZCJ9fSxl
KTt2YXIgYj0zRHRoaXMuX2RhdGFCb3VuZHM7Zm9yKHZhciBmPTNEMDtmPHRoaXMuX3Nlcmllcy5s
ZW5ndGg7ZisrPQope3ZhciBnPTNEdGhpcy5fc2VyaWVzW2ZdO2lmKGcuZ3JvdXBzKXt0aGlzLmdy
b3Vwcz0zRGcuZ3JvdXBzfXZhciBoPTNEZy5kYXQ9CmE7Zm9yKHZhciBjPTNEMDtjPGgubGVuZ3Ro
O2MrKyl7aWYodGhpcy5uYW1lPTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIj0KeDJheGlz
Iil7aWYoaFtjXVswXTxiLm1pbnx8Yi5taW49M0Q9M0RudWxsKXtiLm1pbj0zRGhbY11bMF19aWYo
aFtjXVswXT5iLm1hPQp4fHxiLm1heD0zRD0zRG51bGwpe2IubWF4PTNEaFtjXVswXX19ZWxzZXtp
ZihoW2NdWzFdPGIubWlufHxiLm1pbj0zRD0zRG51bGw9Cil7Yi5taW49M0RoW2NdWzFdfWlmKGhb
Y11bMV0+Yi5tYXh8fGIubWF4PTNEPTNEbnVsbCl7Yi5tYXg9M0RoW2NdWzFdfX19fWlmKD0KdGhp
cy5ncm91cExhYmVscy5sZW5ndGgpe3RoaXMuZ3JvdXBzPTNEdGhpcy5ncm91cExhYmVscy5sZW5n
dGh9fTthLmpxcGxvdC5DPQphdGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVUaWNr
cz0zRGZ1bmN0aW9uKCl7dmFyIEQ9M0R0aGlzLl90aWNrczs9CnZhciB6PTNEdGhpcy50aWNrczt2
YXIgRj0zRHRoaXMubmFtZTt2YXIgQz0zRHRoaXMuX2RhdGFCb3VuZHM7dmFyIHYsQTt2YXIgcT0K
LHc7dmFyIGQsYzt2YXIgYix4O2lmKHoubGVuZ3RoKXtpZih0aGlzLmdyb3Vwcz4xJiYhdGhpcy5f
Z3JvdXBlZCl7dmFyIHI9M0R6PQoubGVuZ3RoO3ZhciBwPTNEcGFyc2VJbnQoci90aGlzLmdyb3Vw
cywxMCk7dmFyIGU9M0QwO2Zvcih2YXIgeD0zRHA7eDxyO3grPQo9M0RwKXt6LnNwbGljZSh4K2Us
MCwiICIpO2UrK310aGlzLl9ncm91cGVkPTNEdHJ1ZX10aGlzLm1pbj0zRDAuNTt0aGlzLm1heD0K
PTNEei5sZW5ndGgrMC41O3ZhciBtPTNEdGhpcy5tYXgtdGhpcy5taW47dGhpcy5udW1iZXJUaWNr
cz0zRDIqei5sZW5ndGgrMTtmPQpvcih4PTNEMDt4PHoubGVuZ3RoO3grKyl7Yj0zRHRoaXMubWlu
KzIqeCptLyh0aGlzLm51bWJlclRpY2tzLTEpO3ZhciBoPTNEbmU9CncgdGhpcy50aWNrUmVuZGVy
ZXIodGhpcy50aWNrT3B0aW9ucyk7aC5zaG93TGFiZWw9M0RmYWxzZTtoLnNldFRpY2soYix0aGlz
Lj0KbmFtZSk7dGhpcy5fdGlja3MucHVzaChoKTt2YXIgaD0zRG5ldyB0aGlzLnRpY2tSZW5kZXJl
cih0aGlzLnRpY2tPcHRpb25zKTtoPQoubGFiZWw9M0R6W3hdO2guc2hvd01hcms9M0RmYWxzZTto
LnNob3dHcmlkbGluZT0zRGZhbHNlO2guc2V0VGljayhiKzAuNSx0aGk9CnMubmFtZSk7dGhpcy5f
dGlja3MucHVzaChoKX12YXIgaD0zRG5ldyB0aGlzLnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRp
b25zKT0KO2guc2hvd0xhYmVsPTNEZmFsc2U7aC5zZXRUaWNrKGIrMSx0aGlzLm5hbWUpO3RoaXMu
X3RpY2tzLnB1c2goaCl9ZWxzZXtpZihGPQo9M0Q9M0QieGF4aXMifHxGPTNEPTNEIngyYXhpcyIp
e3Y9M0R0aGlzLl9wbG90RGltZW5zaW9ucy53aWR0aH1lbHNle3Y9M0R0aGk9CnMuX3Bsb3REaW1l
bnNpb25zLmhlaWdodH1pZih0aGlzLm1pbiE9M0RudWxsJiZ0aGlzLm1heCE9M0RudWxsJiZ0aGlz
Lm51bWJlcj0KVGlja3MhPTNEbnVsbCl7dGhpcy50aWNrSW50ZXJ2YWw9M0RudWxsfWlmKHRoaXMu
bWluIT0zRG51bGwmJnRoaXMubWF4IT0zRG51PQpsbCYmdGhpcy50aWNrSW50ZXJ2YWwhPTNEbnVs
bCl7aWYocGFyc2VJbnQoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnRpY2tJbnQ9CmVydmFsLDEw
KSE9M0QodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMudGlja0ludGVydmFsKXt0aGlzLnRpY2tJbnRl
cnZhbD0zRG51bD0KbH19dmFyIHk9M0RbXTt2YXIgQj0zRDA7dmFyIHE9M0QwLjU7dmFyIHcsRTt2
YXIgZj0zRGZhbHNlO2Zvcih2YXIgeD0zRDA7eDx0PQpoaXMuX3Nlcmllcy5sZW5ndGg7eCsrKXt2
YXIgaz0zRHRoaXMuX3Nlcmllc1t4XTtmb3IodmFyIHU9M0QwO3U8ay5kYXRhLmxlbmc9CnRoO3Ur
Kyl7aWYodGhpcy5uYW1lPTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIngyYXhpcyIpe0U9
M0RrLmRhdGFbdV1bMD0KXX1lbHNle0U9M0RrLmRhdGFbdV1bMV19aWYoYS5pbkFycmF5KEUseSk9
M0Q9M0QtMSl7Zj0zRHRydWU7Qis9M0QxO3kucHVzaChFPQopfX19aWYoZiYmdGhpcy5zb3J0TWVy
Z2VkTGFiZWxzKXtpZih0eXBlb2YgeVswXT0zRD0zRCJzdHJpbmciKXt5LnNvcnQoKX1lbHM9CmV7
eS5zb3J0KGZ1bmN0aW9uKGosaSl7cmV0dXJuIGotaX0pfX10aGlzLnRpY2tzPTNEeTtmb3IodmFy
IHg9M0QwO3g8dGhpcy5fcz0KZXJpZXMubGVuZ3RoO3grKyl7dmFyIGs9M0R0aGlzLl9zZXJpZXNb
eF07Zm9yKHZhciB1PTNEMDt1PGsuZGF0YS5sZW5ndGg7dSsrPQope2lmKHRoaXMubmFtZT0zRD0z
RCJ4YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4aXMiKXtFPTNEay5kYXRhW3VdWzBdfWVsc2U9
CntFPTNEay5kYXRhW3VdWzFdfXZhciBuPTNEYS5pbkFycmF5KEUseSkrMTtpZih0aGlzLm5hbWU9
M0Q9M0QieGF4aXMifHx0aGlzLj0KbmFtZT0zRD0zRCJ4MmF4aXMiKXtrLmRhdGFbdV1bMF09M0Ru
fWVsc2V7ay5kYXRhW3VdWzFdPTNEbn19fWlmKHRoaXMuZ3JvdXBzPQo+MSYmIXRoaXMuX2dyb3Vw
ZWQpe3ZhciByPTNEeS5sZW5ndGg7dmFyIHA9M0RwYXJzZUludChyL3RoaXMuZ3JvdXBzLDEwKTt2
YXI9CiBlPTNEMDtmb3IodmFyIHg9M0RwO3g8cjt4Kz0zRHArMSl7eVt4XT0zRCIgIn10aGlzLl9n
cm91cGVkPTNEdHJ1ZX13PTNEQiswLj0KNTtpZih0aGlzLm51bWJlclRpY2tzPTNEPTNEbnVsbCl7
dGhpcy5udW1iZXJUaWNrcz0zRDIqQisxfXZhciBtPTNEdy1xO3RoaXMuPQptaW49M0RxO3RoaXMu
bWF4PTNEdzt2YXIgbz0zRDA7dmFyIGc9M0RwYXJzZUludCgzK3YvMTAsMTApO3ZhciBwPTNEcGFy
c2VJbnQ9CihCL2csMTApO2lmKHRoaXMudGlja0ludGVydmFsPTNEPTNEbnVsbCl7dGhpcy50aWNr
SW50ZXJ2YWw9M0RtLyh0aGlzLm51bWJlcj0KVGlja3MtMSl9Zm9yKHZhciB4PTNEMDt4PHRoaXMu
bnVtYmVyVGlja3M7eCsrKXtiPTNEdGhpcy5taW4reCp0aGlzLnRpY2tJbnRlPQpydmFsO3ZhciBo
PTNEbmV3IHRoaXMudGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2lmKHgvMj0zRD0zRHBh
cnNlSW50KHg9Ci8yLDEwKSl7aC5zaG93TGFiZWw9M0RmYWxzZTtoLnNob3dNYXJrPTNEdHJ1ZX1l
bHNle2lmKHA+MCYmbzxwKXtoLnNob3dMYWJlbD0KPTNEZmFsc2U7bys9M0QxfWVsc2V7aC5zaG93
TGFiZWw9M0R0cnVlO289M0QwfWgubGFiZWw9M0RoLmZvcm1hdHRlcihoLmZvcm1hPQp0U3RyaW5n
LHlbKHgtMSkvMl0pO2guc2hvd01hcms9M0RmYWxzZTtoLnNob3dHcmlkbGluZT0zRGZhbHNlfWgu
c2V0VGljayhiLHQ9Cmhpcy5uYW1lKTt0aGlzLl90aWNrcy5wdXNoKGgpfX19O2EuanFwbG90LkNh
dGVnb3J5QXhpc1JlbmRlcmVyLnByb3RvdHlwZS5kcj0KYXc9M0RmdW5jdGlvbihiLGope2lmKHRo
aXMuc2hvdyl7dGhpcy5yZW5kZXJlci5jcmVhdGVUaWNrcy5jYWxsKHRoaXMpO3ZhciBoPQo9M0Qw
O3ZhciBjO2lmKHRoaXMuX2VsZW0pe3RoaXMuX2VsZW0uZW1wdHlGb3JjZSgpfXRoaXMuX2VsZW09
M0R0aGlzLl9lbGVtfHw9CmEoJzxkaXYgY2xhc3M9M0QianFwbG90LWF4aXMganFwbG90LScrdGhp
cy5uYW1lKyciIHN0eWxlPTNEInBvc2l0aW9uOmFic29sdT0KdGU7Ij48L2Rpdj4nKTtpZih0aGlz
Lm5hbWU9M0Q9M0QieGF4aXMifHx0aGlzLm5hbWU9M0Q9M0QieDJheGlzIil7dGhpcy5fZWxlPQpt
LndpZHRoKHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRoKX1lbHNle3RoaXMuX2VsZW0uaGVpZ2h0
KHRoaXMuX3Bsb3REaW1lbnM9CmlvbnMuaGVpZ2h0KX10aGlzLmxhYmVsT3B0aW9ucy5heGlzPTNE
dGhpcy5uYW1lO3RoaXMuX2xhYmVsPTNEbmV3IHRoaXMubGFiZT0KbFJlbmRlcmVyKHRoaXMubGFi
ZWxPcHRpb25zKTtpZih0aGlzLl9sYWJlbC5zaG93KXt2YXIgZz0zRHRoaXMuX2xhYmVsLmRyYXco
PQpiLGopO2cuYXBwZW5kVG8odGhpcy5fZWxlbSl9dmFyIGY9M0R0aGlzLl90aWNrcztmb3IodmFy
IGU9M0QwO2U8Zi5sZW5ndGg7ZSs9Cispe3ZhciBkPTNEZltlXTtpZihkLnNob3dMYWJlbCYmKCFk
LmlzTWlub3JUaWNrfHx0aGlzLnNob3dNaW5vclRpY2tzKSl7dmFyID0KZz0zRGQuZHJhdyhiLGop
O2cuYXBwZW5kVG8odGhpcy5fZWxlbSl9fXRoaXMuX2dyb3VwTGFiZWxzPTNEW107Zm9yKHZhciBl
PTNEPQowO2U8dGhpcy5ncm91cExhYmVscy5sZW5ndGg7ZSsrKXt2YXIgZz0zRGEoJzxkaXYgc3R5
bGU9M0QicG9zaXRpb246YWJzb2x1dGU9CjsiIGNsYXNzPTNEImpxcGxvdC0nK3RoaXMubmFtZSsn
LWdyb3VwTGFiZWwiPjwvZGl2PicpO2cuaHRtbCh0aGlzLmdyb3VwTGFiZT0KbHNbZV0pO3RoaXMu
X2dyb3VwTGFiZWxzLnB1c2goZyk7Zy5hcHBlbmRUbyh0aGlzLl9lbGVtKX19cmV0dXJuIHRoaXMu
X2VsZW19PQo7YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlLnNldD0zRGZ1
bmN0aW9uKCl7dmFyIGU9M0QwO3ZhciBtO3Y9CmFyIGs9M0QwO3ZhciBmPTNEMDt2YXIgZD0zRCh0
aGlzLl9sYWJlbD0zRD0zRG51bGwpP2ZhbHNlOnRoaXMuX2xhYmVsLnNob3c7aT0KZih0aGlzLnNo
b3cpe3ZhciBuPTNEdGhpcy5fdGlja3M7Zm9yKHZhciBjPTNEMDtjPG4ubGVuZ3RoO2MrKyl7dmFy
IGc9M0RuW2NdPQo7aWYoZy5zaG93TGFiZWwmJighZy5pc01pbm9yVGlja3x8dGhpcy5zaG93TWlu
b3JUaWNrcykpe2lmKHRoaXMubmFtZT0zRD0zRCI9CnhheGlzInx8dGhpcy5uYW1lPTNEPTNEIngy
YXhpcyIpe209M0RnLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7bT0zRGcuXz0KZWxlbS5v
dXRlcldpZHRoKHRydWUpfWlmKG0+ZSl7ZT0zRG19fX12YXIgaj0zRDA7Zm9yKHZhciBjPTNEMDtj
PHRoaXMuX2dyb3VwPQpMYWJlbHMubGVuZ3RoO2MrKyl7dmFyIGI9M0R0aGlzLl9ncm91cExhYmVs
c1tjXTtpZih0aGlzLm5hbWU9M0Q9M0QieGF4aXMifHw9CnRoaXMubmFtZT0zRD0zRCJ4MmF4aXMi
KXttPTNEYi5vdXRlckhlaWdodCh0cnVlKX1lbHNle209M0RiLm91dGVyV2lkdGgodHJ1ZT0KKX1p
ZihtPmope2o9M0RtfX1pZihkKXtrPTNEdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVl
KTtmPTNEdGhpcy5fbGFiPQplbC5fZWxlbS5vdXRlckhlaWdodCh0cnVlKX1pZih0aGlzLm5hbWU9
M0Q9M0QieGF4aXMiKXtlKz0zRGorZjt0aGlzLl9lbGVtLmM9CnNzKHtoZWlnaHQ6ZSsicHgiLGxl
ZnQ6IjBweCIsYm90dG9tOiIwcHgifSl9ZWxzZXtpZih0aGlzLm5hbWU9M0Q9M0QieDJheGlzIj0K
KXtlKz0zRGorZjt0aGlzLl9lbGVtLmNzcyh7aGVpZ2h0OmUrInB4IixsZWZ0OiIwcHgiLHRvcDoi
MHB4In0pfWVsc2V7aWYodGhpPQpzLm5hbWU9M0Q9M0QieWF4aXMiKXtlKz0zRGorazt0aGlzLl9l
bGVtLmNzcyh7d2lkdGg6ZSsicHgiLGxlZnQ6IjBweCIsdG9wOiI9CjBweCJ9KTtpZihkJiZ0aGlz
Ll9sYWJlbC5jb25zdHJ1Y3Rvcj0zRD0zRGEuanFwbG90LkF4aXNMYWJlbFJlbmRlcmVyKXt0aGlz
Lj0KX2xhYmVsLl9lbGVtLmNzcygid2lkdGgiLGsrInB4Iil9fWVsc2V7ZSs9M0RqK2s7dGhpcy5f
ZWxlbS5jc3Moe3dpZHRoOmUrInB4PQoiLHJpZ2h0OiIwcHgiLHRvcDoiMHB4In0pO2lmKGQmJnRo
aXMuX2xhYmVsLmNvbnN0cnVjdG9yPTNEPTNEYS5qcXBsb3QuQXhpc0w9CmFiZWxSZW5kZXJlcil7
dGhpcy5fbGFiZWwuX2VsZW0uY3NzKCJ3aWR0aCIsaysicHgiKX19fX19fTthLmpxcGxvdC5DYXRl
Z29yeT0KQXhpc1JlbmRlcmVyLnByb3RvdHlwZS5wYWNrPTNEZnVuY3Rpb24oZSxjKXt2YXIgQz0z
RHRoaXMuX3RpY2tzO3ZhciB2PTNEdGhpPQpzLm1heDt2YXIgcz0zRHRoaXMubWluO3ZhciBuPTNE
Yy5tYXg7dmFyIGw9M0RjLm1pbjt2YXIgcT0zRCh0aGlzLl9sYWJlbD0zRD0KPTNEbnVsbCk/ZmFs
c2U6dGhpcy5fbGFiZWwuc2hvdzt2YXIgeDtmb3IodmFyIHIgaW4gZSl7dGhpcy5fZWxlbS5jc3Mo
cixlW3JdPQopfXRoaXMuX29mZnNldHM9M0RjO3ZhciBnPTNEbi1sO3ZhciBrPTNEdi1zO2lmKCF0
aGlzLnJldmVyc2Upe3RoaXMudTJwPTNEZnU9Cm5jdGlvbihoKXtyZXR1cm4oaC1zKSpnL2srbH07
dGhpcy5wMnU9M0RmdW5jdGlvbihoKXtyZXR1cm4oaC1sKSprL2crc307aWYodD0KaGlzLm5hbWU9
M0Q9M0QieGF4aXMifHx0aGlzLm5hbWU9M0Q9M0QieDJheGlzIil7dGhpcy5zZXJpZXNfdTJwPTNE
ZnVuY3Rpb24oPQpoKXtyZXR1cm4oaC1zKSpnL2t9O3RoaXMuc2VyaWVzX3AydT0zRGZ1bmN0aW9u
KGgpe3JldHVybiBoKmsvZytzfX1lbHNle3RoaXM9Ci5zZXJpZXNfdTJwPTNEZnVuY3Rpb24oaCl7
cmV0dXJuKGgtdikqZy9rfTt0aGlzLnNlcmllc19wMnU9M0RmdW5jdGlvbihoKXtyZT0KdHVybiBo
KmsvZyt2fX19ZWxzZXt0aGlzLnUycD0zRGZ1bmN0aW9uKGgpe3JldHVybiBsKyh2LWgpKmcva307
dGhpcy5wMnU9M0RmPQp1bmN0aW9uKGgpe3JldHVybiBzKyhoLWwpKmsvZ307aWYodGhpcy5uYW1l
PTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIng9CjJheGlzIil7dGhpcy5zZXJpZXNfdTJw
PTNEZnVuY3Rpb24oaCl7cmV0dXJuKHYtaCkqZy9rfTt0aGlzLnNlcmllc19wMnU9M0RmdT0KbmN0
aW9uKGgpe3JldHVybiBoKmsvZyt2fX1lbHNle3RoaXMuc2VyaWVzX3UycD0zRGZ1bmN0aW9uKGgp
e3JldHVybihzLWgpKmcvPQprfTt0aGlzLnNlcmllc19wMnU9M0RmdW5jdGlvbihoKXtyZXR1cm4g
aCprL2crc319fWlmKHRoaXMuc2hvdyl7aWYodGhpcy5uYW09CmU9M0Q9M0QieGF4aXMifHx0aGlz
Lm5hbWU9M0Q9M0QieDJheGlzIil7Zm9yKHg9M0QwO3g8Qy5sZW5ndGg7eCsrKXt2YXIgbz0zRD0K
Q1t4XTtpZihvLnNob3cmJm8uc2hvd0xhYmVsKXt2YXIgYjtpZihvLmNvbnN0cnVjdG9yPTNEPTNE
YS5qcXBsb3QuQ2FudmFzQXhpPQpzVGlja1JlbmRlcmVyJiZvLmFuZ2xlKXt2YXIgQT0zRCh0aGlz
Lm5hbWU9M0Q9M0QieGF4aXMiKT8xOi0xO3N3aXRjaChvLmxhYmU9CmxQb3NpdGlvbil7Y2FzZSJh
dXRvIjppZihBKm8uYW5nbGU8MCl7Yj0zRC1vLmdldFdpZHRoKCkrby5fdGV4dFJlbmRlcmVyLmhl
aT0KZ2h0Kk1hdGguc2luKC1vLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9ZWxzZXtiPTNELW8uX3Rl
eHRSZW5kZXJlci5oZWlnaHQqTWF0PQpoLnNpbihvLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9YnJl
YWs7Y2FzZSJlbmQiOmI9M0Qtby5nZXRXaWR0aCgpK28uX3RleHRSZW49CmRlcmVyLmhlaWdodCpN
YXRoLnNpbigtby5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrO2Nhc2Uic3RhcnQiOmI9M0Qt
by5fdD0KZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKG8uX3RleHRSZW5kZXJlci5hbmdsZSkv
MjticmVhaztjYXNlIm1pZGRsZSI6Yj0KPTNELW8uZ2V0V2lkdGgoKS8yK28uX3RleHRSZW5kZXJl
ci5oZWlnaHQqTWF0aC5zaW4oLW8uX3RleHRSZW5kZXJlci5hbmdsZSkvPQoyO2JyZWFrO2RlZmF1
bHQ6Yj0zRC1vLmdldFdpZHRoKCkvMitvLl90ZXh0UmVuZGVyZXIuaGVpZ2h0Kk1hdGguc2luKC1v
Ll90ZXg9CnRSZW5kZXJlci5hbmdsZSkvMjticmVha319ZWxzZXtiPTNELW8uZ2V0V2lkdGgoKS8y
fXZhciBEPTNEdGhpcy51MnAoby52YWx1ZT0KKStiKyJweCI7by5fZWxlbS5jc3MoImxlZnQiLEQp
O28ucGFjaygpfX12YXIgej0zRFsiYm90dG9tIiwwXTtpZihxKXt2YXIgbT0KPTNEdGhpcy5fbGFi
ZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKTt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoImxlZnQiLGwr
Zy8yLW0vPQoyKyJweCIpO2lmKHRoaXMubmFtZT0zRD0zRCJ4YXhpcyIpe3RoaXMuX2xhYmVsLl9l
bGVtLmNzcygiYm90dG9tIiwiMHB4Iik7ej0KPTNEWyJib3R0b20iLHRoaXMuX2xhYmVsLl9lbGVt
Lm91dGVySGVpZ2h0KHRydWUpXX1lbHNle3RoaXMuX2xhYmVsLl9lbGVtLmNzPQpzKCJ0b3AiLCIw
cHgiKTt6PTNEWyJ0b3AiLHRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpXX10aGlz
Ll9sYWJlbC49CnBhY2soKX12YXIgZD0zRHBhcnNlSW50KHRoaXMuX3RpY2tzLmxlbmd0aC90aGlz
Lmdyb3VwcywxMCkrMTtmb3IoeD0zRDA7eDx0aD0KaXMuX2dyb3VwTGFiZWxzLmxlbmd0aDt4Kysp
e3ZhciBCPTNEMDt2YXIgZj0zRDA7Zm9yKHZhciB1PTNEeCpkO3U8KHgrMSkqZDt1PQorKyl7aWYo
dT49M0R0aGlzLl90aWNrcy5sZW5ndGgtMSl7Y29udGludWV9aWYodGhpcy5fdGlja3NbdV0uX2Vs
ZW0mJnRoaXMuX3Q9Cmlja3NbdV0ubGFiZWwhPTNEIiAiKXt2YXIgbz0zRHRoaXMuX3RpY2tzW3Vd
Ll9lbGVtO3ZhciByPTNEby5wb3NpdGlvbigpO0IrPQo9M0RyLmxlZnQrby5vdXRlcldpZHRoKHRy
dWUpLzI7ZisrfX1CPTNEQi9mO3RoaXMuX2dyb3VwTGFiZWxzW3hdLmNzcyh7bGVmdDo9CihCLXRo
aXMuX2dyb3VwTGFiZWxzW3hdLm91dGVyV2lkdGgodHJ1ZSkvMil9KTt0aGlzLl9ncm91cExhYmVs
c1t4XS5jc3MoelswXT0KLHpbMV0pfX1lbHNle2Zvcih4PTNEMDt4PEMubGVuZ3RoO3grKyl7dmFy
IG89M0RDW3hdO2lmKG8uc2hvdyYmby5zaG93TGFiZWwpPQp7dmFyIGI7aWYoby5jb25zdHJ1Y3Rv
cj0zRD0zRGEuanFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXImJm8uYW5nbGUpe3ZhciA9CkE9
M0QodGhpcy5uYW1lPTNEPTNEInlheGlzIik/MTotMTtzd2l0Y2goby5sYWJlbFBvc2l0aW9uKXtj
YXNlImF1dG8iOmNhc2UiZT0KbmQiOmlmKEEqby5hbmdsZTwwKXtiPTNELW8uX3RleHRSZW5kZXJl
ci5oZWlnaHQqTWF0aC5jb3MoLW8uX3RleHRSZW5kZXJlci5hPQpuZ2xlKS8yfWVsc2V7Yj0zRC1v
LmdldEhlaWdodCgpK28uX3RleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5jb3Moby5fdGV4dFJlbmQ9
CmVyZXIuYW5nbGUpLzJ9YnJlYWs7Y2FzZSJzdGFydCI6aWYoby5hbmdsZT4wKXtiPTNELW8uX3Rl
eHRSZW5kZXJlci5oZWlnaHQqTT0KYXRoLmNvcygtby5fdGV4dFJlbmRlcmVyLmFuZ2xlKS8yfWVs
c2V7Yj0zRC1vLmdldEhlaWdodCgpK28uX3RleHRSZW5kZXJlci5oPQplaWdodCpNYXRoLmNvcyhv
Ll90ZXh0UmVuZGVyZXIuYW5nbGUpLzJ9YnJlYWs7Y2FzZSJtaWRkbGUiOmI9M0Qtby5nZXRIZWln
aHQ9CigpLzI7YnJlYWs7ZGVmYXVsdDpiPTNELW8uZ2V0SGVpZ2h0KCkvMjticmVha319ZWxzZXti
PTNELW8uZ2V0SGVpZ2h0KCkvMn12YT0KciBEPTNEdGhpcy51MnAoby52YWx1ZSkrYisicHgiO28u
X2VsZW0uY3NzKCJ0b3AiLEQpO28ucGFjaygpfX12YXIgej0zRFsibGVmPQp0IiwwXTtpZihxKXt2
YXIgeT0zRHRoaXMuX2xhYmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpO3RoaXMuX2xhYmVsLl9l
bGVtLmM9CnNzKCJ0b3AiLG4tZy8yLXkvMisicHgiKTtpZih0aGlzLm5hbWU9M0Q9M0QieWF4aXMi
KXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIj0KbGVmdCIsIjBweCIpO3o9M0RbImxlZnQiLHRoaXMu
X2xhYmVsLl9lbGVtLm91dGVyV2lkdGgodHJ1ZSldfWVsc2V7dGhpcy5fbGFiPQplbC5fZWxlbS5j
c3MoInJpZ2h0IiwiMHB4Iik7ej0zRFsicmlnaHQiLHRoaXMuX2xhYmVsLl9lbGVtLm91dGVyV2lk
dGgodHJ1ZSk9Cl19dGhpcy5fbGFiZWwucGFjaygpfXZhciBkPTNEcGFyc2VJbnQodGhpcy5fdGlj
a3MubGVuZ3RoL3RoaXMuZ3JvdXBzLDEwKSsxOz0KZm9yKHg9M0QwO3g8dGhpcy5fZ3JvdXBMYWJl
bHMubGVuZ3RoO3grKyl7dmFyIEI9M0QwO3ZhciBmPTNEMDtmb3IodmFyIHU9M0R4PQoqZDt1PCh4
KzEpKmQ7dSsrKXtpZih1Pj0zRHRoaXMuX3RpY2tzLmxlbmd0aC0xKXtjb250aW51ZX1pZih0aGlz
Ll90aWNrc1t1XS49Cl9lbGVtJiZ0aGlzLl90aWNrc1t1XS5sYWJlbCE9M0QiICIpe3ZhciBvPTNE
dGhpcy5fdGlja3NbdV0uX2VsZW07dmFyIHI9M0RvLj0KcG9zaXRpb24oKTtCKz0zRHIudG9wK28u
b3V0ZXJIZWlnaHQoKS8yO2YrK319Qj0zREIvZjt0aGlzLl9ncm91cExhYmVsc1t4XS5jPQpzcyh7
dG9wOkItdGhpcy5fZ3JvdXBMYWJlbHNbeF0ub3V0ZXJIZWlnaHQoKS8yfSk7dGhpcy5fZ3JvdXBM
YWJlbHNbeF0uY3NzKHo9ClswXSx6WzFdKX19fX19KShqUXVlcnkpOy8qIGpxUGxvdCAxLjAuOHIx
MjUwIHwgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbz0KIHwganBsb3QuY29tCisgICBqc0Rh
dGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvCisgKi8oZnVuY3Rpb24oail7ai5qcXBs
b3QuQ3Vyc29yPTNEZnVuY3Rpb24ocSl7dGhpcy5zdHlsZT0zRCJjcm9zc2hhaXIiO3RoaT0Kcy5w
cmV2aW91c0N1cnNvcj0zRCJhdXRvIjt0aGlzLnNob3c9M0RqLmpxcGxvdC5jb25maWcuZW5hYmxl
UGx1Z2luczt0aGlzLnNoPQpvd1Rvb2x0aXA9M0R0cnVlO3RoaXMuZm9sbG93TW91c2U9M0RmYWxz
ZTt0aGlzLnRvb2x0aXBMb2NhdGlvbj0zRCJzZSI7dGhpcy49CnRvb2x0aXBPZmZzZXQ9M0Q2O3Ro
aXMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb249M0RmYWxzZTt0aGlzLnNob3dUb29sdGlwVW5pdD0K
UG9zaXRpb249M0R0cnVlO3RoaXMuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb249M0RmYWxzZTt0aGlz
LnRvb2x0aXBGb3JtYXRTdHJpPQpuZz0zRCIlLjRQLCAlLjRQIjt0aGlzLnVzZUF4ZXNGb3JtYXR0
ZXJzPTNEdHJ1ZTt0aGlzLnRvb2x0aXBBeGlzR3JvdXBzPTNEW109Cjt0aGlzLnpvb209M0RmYWxz
ZTt0aGlzLnpvb21Qcm94eT0zRGZhbHNlO3RoaXMuem9vbVRhcmdldD0zRGZhbHNlO3RoaXMubG9v
cz0KZVpvb209M0R0cnVlO3RoaXMuY2xpY2tSZXNldD0zRGZhbHNlO3RoaXMuZGJsQ2xpY2tSZXNl
dD0zRHRydWU7dGhpcy5zaG93VmVyPQp0aWNhbExpbmU9M0RmYWxzZTt0aGlzLnNob3dIb3Jpem9u
dGFsTGluZT0zRGZhbHNlO3RoaXMuY29uc3RyYWluWm9vbVRvPTNEIm49Cm9uZSI7dGhpcy5zaGFw
ZVJlbmRlcmVyPTNEbmV3IGouanFwbG90LlNoYXBlUmVuZGVyZXIoKTt0aGlzLl96b29tPTNEe3N0
YXJ0Oj0KW10sZW5kOltdLHN0YXJ0ZWQ6ZmFsc2Usem9vbWluZzpmYWxzZSxpc1pvb21lZDpmYWxz
ZSxheGVzOntzdGFydDp7fSxlbmQ6e319PQosZ3JpZHBvczp7fSxkYXRhcG9zOnt9fTt0aGlzLl90
b29sdGlwRWxlbTt0aGlzLnpvb21DYW52YXM7dGhpcy5jdXJzb3JDYW52YXM9Cjt0aGlzLmludGVy
c2VjdGlvblRocmVzaG9sZD0zRDI7dGhpcy5zaG93Q3Vyc29yTGVnZW5kPTNEZmFsc2U7dGhpcy5j
dXJzb3JMZT0KZ2VuZEZvcm1hdFN0cmluZz0zRGouanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRG
b3JtYXRTdHJpbmc7dGhpcy5fb2xkSGFuZGxlPQpycz0zRHtvbnNlbGVjdHN0YXJ0Om51bGwsb25k
cmFnOm51bGwsb25tb3VzZWRvd246bnVsbH07dGhpcy5jb25zdHJhaW5PdXRzaWQ9CmVab29tPTNE
dHJ1ZTt0aGlzLnNob3dUb29sdGlwT3V0c2lkZVpvb209M0RmYWxzZTt0aGlzLm9uR3JpZD0zRGZh
bHNlO2ouZXh0ZT0KbmQodHJ1ZSx0aGlzLHEpfTtqLmpxcGxvdC5DdXJzb3IuY3Vyc29yTGVnZW5k
Rm9ybWF0U3RyaW5nPTNEIiVzIHg6JXMsIHk6JXMiPQo7ai5qcXBsb3QuQ3Vyc29yLmluaXQ9M0Rm
dW5jdGlvbih0LHMscil7dmFyIHE9M0RyfHx7fTt0aGlzLnBsdWdpbnMuY3Vyc29yPQo9M0RuZXcg
ai5qcXBsb3QuQ3Vyc29yKHEuY3Vyc29yKTt2YXIgdT0zRHRoaXMucGx1Z2lucy5jdXJzb3I7aWYo
dS5zaG93KXtqLmo9CnFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VF
bnRlciIsYl0pO2ouanFwbG90LmV2ZW50TGlzdGVuZT0Kckhvb2tzLnB1c2goWyJqcXBsb3RNb3Vz
ZUxlYXZlIixmXSk7ai5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWyJqcXBsPQpvdE1v
dXNlTW92ZSIsaV0pO2lmKHUuc2hvd0N1cnNvckxlZ2VuZCl7ci5sZWdlbmQ9M0RyLmxlZ2VuZHx8
e307ci5sZWdlbmQucmU9Cm5kZXJlcj0zRGouanFwbG90LkN1cnNvckxlZ2VuZFJlbmRlcmVyO3Iu
bGVnZW5kLmZvcm1hdFN0cmluZz0zRHRoaXMucGx1Z2lucz0KLmN1cnNvci5jdXJzb3JMZWdlbmRG
b3JtYXRTdHJpbmc7ci5sZWdlbmQuc2hvdz0zRHRydWV9aWYodS56b29tKXtqLmpxcGxvdC5lPQp2
ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VEb3duIixhXSk7aWYodS5jbGlja1Jl
c2V0KXtqLmpxcGxvdC5ldmU9Cm50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90Q2xpY2siLGtd
KX1pZih1LmRibENsaWNrUmVzZXQpe2ouanFwbG90LmV2ZW50TD0KaXN0ZW5lckhvb2tzLnB1c2go
WyJqcXBsb3REYmxDbGljayIsY10pfX10aGlzLnJlc2V0Wm9vbT0zRGZ1bmN0aW9uKCl7dmFyIHg9
Cj0zRHRoaXMuYXhlcztpZighdS56b29tUHJveHkpe2Zvcih2YXIgdyBpbiB4KXt4W3ddLnJlc2V0
KCk7eFt3XS5fdGlja3M9M0RbXT0KO2lmKHUuX3pvb20uYXhlc1t3XSE9M0Q9M0R1bmRlZmluZWQp
e3hbd10uX2F1dG9Gb3JtYXRTdHJpbmc9M0R1Ll96b29tLmF4ZXNbPQp3XS50aWNrRm9ybWF0U3Ry
aW5nfX10aGlzLnJlZHJhdygpfWVsc2V7dmFyIHY9M0R0aGlzLnBsdWdpbnMuY3Vyc29yLnpvb21D
YW49CnZhcy5fY3R4O3YuY2xlYXJSZWN0KDAsMCx2LmNhbnZhcy53aWR0aCx2LmNhbnZhcy5oZWln
aHQpO3Y9M0RudWxsfXRoaXMucGx1Zz0KaW5zLmN1cnNvci5fem9vbS5pc1pvb21lZD0zRGZhbHNl
O3RoaXMudGFyZ2V0LnRyaWdnZXIoImpxcGxvdFJlc2V0Wm9vbSIsW3RoPQppcyx0aGlzLnBsdWdp
bnMuY3Vyc29yXSl9O2lmKHUuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb24pe3Uuc2hvd1Rvb2x0aXBV
bml0UG89CnNpdGlvbj0zRGZhbHNlO3Uuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb249M0RmYWxzZTtp
ZihxLmN1cnNvci50b29sdGlwRm9ybWF0Uz0KdHJpbmc9M0Q9M0R1bmRlZmluZWQpe3UudG9vbHRp
cEZvcm1hdFN0cmluZz0zRGouanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRGPQpvcm1hdFN0cmlu
Z319fX07ai5qcXBsb3QuQ3Vyc29yLnBvc3REcmF3PTNEZnVuY3Rpb24oKXt2YXIgeD0zRHRoaXMu
cGx1Z2lucy49CmN1cnNvcjtpZih4Lnpvb21DYW52YXMpe3guem9vbUNhbnZhcy5yZXNldENhbnZh
cygpO3guem9vbUNhbnZhcz0zRG51bGx9aWYoeD0KLmN1cnNvckNhbnZhcyl7eC5jdXJzb3JDYW52
YXMucmVzZXRDYW52YXMoKTt4LmN1cnNvckNhbnZhcz0zRG51bGx9aWYoeC5fdG9vPQpsdGlwRWxl
bSl7eC5fdG9vbHRpcEVsZW0uZW1wdHlGb3JjZSgpO3guX3Rvb2x0aXBFbGVtPTNEbnVsbH1pZih4
Lnpvb20pe3guem89Cm9tQ2FudmFzPTNEbmV3IGouanFwbG90LkdlbmVyaWNDYW52YXMoKTt0aGlz
LmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh4Lnpvbz0KbUNhbnZhcy5jcmVhdGVFbGVtZW50KHRo
aXMuX2dyaWRQYWRkaW5nLCJqcXBsb3Qtem9vbS1jYW52YXMiLHRoaXMuX3Bsb3REaW1lPQpuc2lv
bnMsdGhpcykpO3guem9vbUNhbnZhcy5zZXRDb250ZXh0KCl9dmFyIHY9M0Rkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXY9CiIpO3guX3Rvb2x0aXBFbGVtPTNEaih2KTt2PTNEbnVsbDt4Ll90b29s
dGlwRWxlbS5hZGRDbGFzcygianFwbG90LWN1cnNvci10bz0Kb2x0aXAiKTt4Ll90b29sdGlwRWxl
bS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSJ9KTtpZih4Lnpvb21DPQph
bnZhcyl7eC56b29tQ2FudmFzLl9lbGVtLmJlZm9yZSh4Ll90b29sdGlwRWxlbSl9ZWxzZXt0aGlz
LmV2ZW50Q2FudmFzLl9lbGU9Cm0uYmVmb3JlKHguX3Rvb2x0aXBFbGVtKX1pZih4LnNob3dWZXJ0
aWNhbExpbmV8fHguc2hvd0hvcml6b250YWxMaW5lKXt4LmN1cj0Kc29yQ2FudmFzPTNEbmV3IGou
anFwbG90LkdlbmVyaWNDYW52YXMoKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh4LmN1
PQpyc29yQ2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1jdXJz
b3ItY2FudmFzIix0aGlzLl9wbG89CnREaW1lbnNpb25zLHRoaXMpKTt4LmN1cnNvckNhbnZhcy5z
ZXRDb250ZXh0KCl9aWYoeC5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbj0KKXtpZih4LnRvb2x0aXBB
eGlzR3JvdXBzLmxlbmd0aD0zRD0zRD0zRDApe3ZhciB0PTNEdGhpcy5zZXJpZXM7dmFyIHU7dmFy
IHE9Cj0zRFtdO2Zvcih2YXIgcj0zRDA7cjx0Lmxlbmd0aDtyKyspe3U9M0R0W3JdO3ZhciB3PTNE
dS54YXhpcysiLCIrdS55YXhpcztpZj0KKGouaW5BcnJheSh3LHEpPTNEPTNELTEpe3EucHVzaCh3
KX19Zm9yKHZhciByPTNEMDtyPHEubGVuZ3RoO3IrKyl7eC50b29sdGlwPQpBeGlzR3JvdXBzLnB1
c2gocVtyXS5zcGxpdCgiLCIpKX19fX07ai5qcXBsb3QuQ3Vyc29yLnpvb21Qcm94eT0zRGZ1bmN0
aW9uKHY9CixyKXt2YXIgcT0zRHYucGx1Z2lucy5jdXJzb3I7dmFyIHU9M0RyLnBsdWdpbnMuY3Vy
c29yO3Euem9vbVRhcmdldD0zRHRydWU7cT0KLnpvb209M0R0cnVlO3Euc3R5bGU9M0QiYXV0byI7
cS5kYmxDbGlja1Jlc2V0PTNEZmFsc2U7dS56b29tPTNEdHJ1ZTt1Lnpvb21QPQpyb3h5PTNEdHJ1
ZTtyLnRhcmdldC5iaW5kKCJqcXBsb3Rab29tIix0KTtyLnRhcmdldC5iaW5kKCJqcXBsb3RSZXNl
dFpvb20iLHM9Cik7ZnVuY3Rpb24gdCh4LHcseix5LEEpe3EuZG9ab29tKHcseix2LEEpfWZ1bmN0
aW9uIHModyx4LHkpe3YucmVzZXRab29tKCl9fT0KO2ouanFwbG90LkN1cnNvci5wcm90b3R5cGUu
cmVzZXRab29tPTNEZnVuY3Rpb24odSx2KXt2YXIgdD0zRHUuYXhlczt2YXIgcz0KPTNEdi5fem9v
bS5heGVzO2lmKCF1LnBsdWdpbnMuY3Vyc29yLnpvb21Qcm94eSYmdi5fem9vbS5pc1pvb21lZCl7
Zm9yKHZhciByPQogaW4gdCl7dFtyXS5yZXNldCgpO3Rbcl0uX3RpY2tzPTNEW107dFtyXS5fYXV0
b0Zvcm1hdFN0cmluZz0zRHNbcl0udGlja0Zvcm09CmF0U3RyaW5nfXUucmVkcmF3KCk7di5fem9v
bS5pc1pvb21lZD0zRGZhbHNlfWVsc2V7dmFyIHE9M0R2Lnpvb21DYW52YXMuX2N0eD0KO3EuY2xl
YXJSZWN0KDAsMCxxLmNhbnZhcy53aWR0aCxxLmNhbnZhcy5oZWlnaHQpO3E9M0RudWxsfXUudGFy
Z2V0LnRyaWdnZXIoPQoianFwbG90UmVzZXRab29tIixbdSx2XSl9O2ouanFwbG90LkN1cnNvci5y
ZXNldFpvb209M0RmdW5jdGlvbihxKXtxLnJlc2V0Wm89Cm9tKCl9O2ouanFwbG90LkN1cnNvci5w
cm90b3R5cGUuZG9ab29tPTNEZnVuY3Rpb24oRyx0LEMsdSl7dmFyIEk9M0R1O3ZhciBGPQo9M0RD
LmF4ZXM7dmFyIHI9M0RJLl96b29tLmF4ZXM7dmFyIHc9M0RyLnN0YXJ0O3ZhciBzPTNEci5lbmQ7
dmFyIEIsRSx6LEQsdiw9CngscSxILEo7dmFyIEE9M0RDLnBsdWdpbnMuY3Vyc29yLnpvb21DYW52
YXMuX2N0eDtpZigoSS5jb25zdHJhaW5ab29tVG89M0Q9Cj0zRCJub25lIiYmTWF0aC5hYnMoRy54
LUkuX3pvb20uc3RhcnRbMF0pPjYmJk1hdGguYWJzKEcueS1JLl96b29tLnN0YXJ0WzFdKT0KPjYp
fHwoSS5jb25zdHJhaW5ab29tVG89M0Q9M0QieCImJk1hdGguYWJzKEcueC1JLl96b29tLnN0YXJ0
WzBdKT42KXx8KEkuY29uPQpzdHJhaW5ab29tVG89M0Q9M0QieSImJk1hdGguYWJzKEcueS1JLl96
b29tLnN0YXJ0WzFdKT42KSl7aWYoIUMucGx1Z2lucy5jdXI9CnNvci56b29tUHJveHkpe2Zvcih2
YXIgeSBpbiB0KXtpZihJLl96b29tLmF4ZXNbeV09M0Q9M0R1bmRlZmluZWQpe0kuX3pvb20uYT0K
eGVzW3ldPTNEe307SS5fem9vbS5heGVzW3ldLm51bWJlclRpY2tzPTNERlt5XS5udW1iZXJUaWNr
cztJLl96b29tLmF4ZXNbeV0uPQp0aWNrSW50ZXJ2YWw9M0RGW3ldLnRpY2tJbnRlcnZhbDtJLl96
b29tLmF4ZXNbeV0uZGFUaWNrSW50ZXJ2YWw9M0RGW3ldLmRhVGk9CmNrSW50ZXJ2YWw7SS5fem9v
bS5heGVzW3ldLm1pbj0zREZbeV0ubWluO0kuX3pvb20uYXhlc1t5XS5tYXg9M0RGW3ldLm1heDtJ
Lj0KX3pvb20uYXhlc1t5XS50aWNrRm9ybWF0U3RyaW5nPTNEKEZbeV0udGlja09wdGlvbnMhPTNE
bnVsbCk/Rlt5XS50aWNrT3B0aW9uPQpzLmZvcm1hdFN0cmluZzoiIn1pZigoSS5jb25zdHJhaW5a
b29tVG89M0Q9M0Qibm9uZSIpfHwoSS5jb25zdHJhaW5ab29tVG89M0Q9Cj0zRCJ4IiYmeS5jaGFy
QXQoMCk9M0Q9M0QieCIpfHwoSS5jb25zdHJhaW5ab29tVG89M0Q9M0QieSImJnkuY2hhckF0KDAp
PTNEPQo9M0QieSIpKXt6PTNEdFt5XTtpZih6IT0zRG51bGwpe2lmKHo+d1t5XSl7dj0zRHdbeV07
eD0zRHp9ZWxzZXtEPTNEd1t5XS16O3Y9Cj0zRHo7eD0zRHdbeV19cT0zREZbeV07SD0zRG51bGw7
aWYocS5hbGlnblRpY2tzKXtpZihxLm5hbWU9M0Q9M0Q9M0QieDJheGlzIj0KJiZDLmF4ZXMueGF4
aXMuc2hvdyl7SD0zREMuYXhlcy54YXhpcy5udW1iZXJUaWNrc31lbHNle2lmKHEubmFtZS5jaGFy
QXQoMCk9Cj0zRD0zRD0zRCJ5IiYmcS5uYW1lIT0zRD0zRCJ5YXhpcyImJnEubmFtZSE9M0Q9M0Qi
eU1pZEF4aXMiJiZDLmF4ZXMueWF4aXMucz0KaG93KXtIPTNEQy5heGVzLnlheGlzLm51bWJlclRp
Y2tzfX19aWYodGhpcy5sb29zZVpvb20mJihGW3ldLnJlbmRlcmVyLmNvbnN0PQpydWN0b3I9M0Q9
M0Q9M0RqLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXJ8fEZbeV0ucmVuZGVyZXIuY29uc3RydWN0
b3I9M0Q9M0Q9Cj0zRGouanFwbG90LkxvZ0F4aXNSZW5kZXJlcikpe0o9M0RqLmpxcGxvdC5MaW5l
YXJUaWNrR2VuZXJhdG9yKHYseCxxLl9zY2FsZT0KZmFjdCxIKTtpZihGW3ldLnRpY2tJbnNldCYm
SlswXTxGW3ldLm1pbitGW3ldLnRpY2tJbnNldCpGW3ldLnRpY2tJbnRlcnZhbCl7PQpKWzBdKz0z
REpbNF07SlsyXS09M0QxfWlmKEZbeV0udGlja0luc2V0JiZKWzFdPkZbeV0ubWF4LUZbeV0udGlj
a0luc2V0KkZbeV09Ci50aWNrSW50ZXJ2YWwpe0pbMV0tPTNESls0XTtKWzJdLT0zRDF9aWYoRlt5
XS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj0zRD0zRD0zRD0Kai5qcXBsb3QuTG9nQXhpc1JlbmRlcmVy
JiZKWzBdPEZbeV0ubWluKXtKWzBdKz0zREpbNF07SlsyXS09M0QxfUZbeV0ubWluPTNEPQpKWzBd
O0ZbeV0ubWF4PTNESlsxXTtGW3ldLl9hdXRvRm9ybWF0U3RyaW5nPTNESlszXTtGW3ldLm51bWJl
clRpY2tzPTNESlsyXTs9CkZbeV0udGlja0ludGVydmFsPTNESls0XTtGW3ldLmRhVGlja0ludGVy
dmFsPTNEW0pbNF0vMTAwMCwic2Vjb25kcyJdfWVsc2V7Rj0KW3ldLm1pbj0zRHY7Rlt5XS5tYXg9
M0R4O0ZbeV0udGlja0ludGVydmFsPTNEbnVsbDtGW3ldLm51bWJlclRpY2tzPTNEbnVsbDtGPQpb
eV0uZGFUaWNrSW50ZXJ2YWw9M0RudWxsfUZbeV0uX3RpY2tzPTNEW119fX1BLmNsZWFyUmVjdCgw
LDAsQS5jYW52YXMud2lkdGg9CixBLmNhbnZhcy5oZWlnaHQpO0MucmVkcmF3KCk7SS5fem9vbS5p
c1pvb21lZD0zRHRydWU7QT0zRG51bGx9Qy50YXJnZXQudHJpZz0KZ2VyKCJqcXBsb3Rab29tIixb
Ryx0LEMsdV0pfX07ai5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2goai5qcXBsb3QuQ3Vyc29yLmlu
PQppdCk7ai5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKGouanFwbG90LkN1cnNvci5wb3N0RHJh
dyk7ZnVuY3Rpb24gZShHLHIsQyk9Cnt2YXIgSj0zREMucGx1Z2lucy5jdXJzb3I7dmFyIHc9M0Qi
Ijt2YXIgTj0zRGZhbHNlO2lmKEouc2hvd1Rvb2x0aXBHcmlkUG9zaT0KdGlvbil7dz0zREcueCsi
LCAiK0cueTtOPTNEdHJ1ZX1pZihKLnNob3dUb29sdGlwVW5pdFBvc2l0aW9uKXt2YXIgRjtmb3Io
dmFyPQogRT0zRDA7RTxKLnRvb2x0aXBBeGlzR3JvdXBzLmxlbmd0aDtFKyspe0Y9M0RKLnRvb2x0
aXBBeGlzR3JvdXBzW0VdO2lmKE4pe3c9Cis9M0QiPGJyIC8+In1pZihKLnVzZUF4ZXNGb3JtYXR0
ZXJzKXtmb3IodmFyIEQ9M0QwO0Q8Ri5sZW5ndGg7RCsrKXtpZihEKXt3Kz0KPTNEIiwgIn12YXIg
SD0zREMuYXhlc1tGW0RdXS5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBCPTNEQy5heGVzW0ZbRF1d
Ll90aWNrPQpzWzBdLmZvcm1hdFN0cmluZzt3Kz0zREgoQixyW0ZbRF1dKX19ZWxzZXt3Kz0zRGou
anFwbG90LnNwcmludGYoSi50b29sdGlwRm89CnJtYXRTdHJpbmcscltGWzBdXSxyW0ZbMV1dKX1O
PTNEdHJ1ZX19aWYoSi5zaG93VG9vbHRpcERhdGFQb3NpdGlvbil7dmFyIHU9Cj0zREMuc2VyaWVz
O3ZhciBNPTNEZChDLEcueCxHLnkpO3ZhciBOPTNEZmFsc2U7Zm9yKHZhciBFPTNEMDtFPHUubGVu
Z3RoO0UrKz0KKXtpZih1W0VdLnNob3cpe3ZhciB5PTNEdVtFXS5pbmRleDt2YXIgdD0zRHVbRV0u
bGFiZWwudG9TdHJpbmcoKTt2YXIgST0zRGouPQppbkFycmF5KHksTS5pbmRpY2VzKTt2YXIgej0z
RHVuZGVmaW5lZDt2YXIgeD0zRHVuZGVmaW5lZDtpZihJIT0zRC0xKXt2YXIgTD0KPTNETS5kYXRh
W0ldLmRhdGE7aWYoSi51c2VBeGVzRm9ybWF0dGVycyl7dmFyIEE9M0R1W0VdLl94YXhpcy5fdGlj
a3NbMF0uZm9yPQptYXR0ZXI7dmFyIHE9M0R1W0VdLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVy
O3ZhciBLPTNEdVtFXS5feGF4aXMuX3RpY2tzWzA9Cl0uZm9ybWF0U3RyaW5nO3ZhciB2PTNEdVtF
XS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt6PTNEQShLLExbMF0pO3g9Cj0zRHEodixM
WzFdKX1lbHNle3o9M0RMWzBdO3g9M0RMWzFdfWlmKE4pe3crPTNEIjxiciAvPiJ9dys9M0RqLmpx
cGxvdC5zcHJpbj0KdGYoSi50b29sdGlwRm9ybWF0U3RyaW5nLHQseix4KTtOPTNEdHJ1ZX19fX1K
Ll90b29sdGlwRWxlbS5odG1sKHcpfWZ1bmN0aW9uPQogZyhDLEEpe3ZhciBFPTNEQS5wbHVnaW5z
LmN1cnNvcjt2YXIgej0zREUuY3Vyc29yQ2FudmFzLl9jdHg7ei5jbGVhclJlY3QoMCw9CjAsei5j
YW52YXMud2lkdGgsei5jYW52YXMuaGVpZ2h0KTtpZihFLnNob3dWZXJ0aWNhbExpbmUpe0Uuc2hh
cGVSZW5kZXJlci5kcj0KYXcoeixbW0MueCwwXSxbQy54LHouY2FudmFzLmhlaWdodF1dKX1pZihF
LnNob3dIb3Jpem9udGFsTGluZSl7RS5zaGFwZVJlbmRlPQpyZXIuZHJhdyh6LFtbMCxDLnldLFt6
LmNhbnZhcy53aWR0aCxDLnldXSl9dmFyIEc9M0RkKEEsQy54LEMueSk7aWYoRS5zaG93Q3U9CnJz
b3JMZWdlbmQpe3ZhciByPTNEaihBLnRhcmdldElkKyIgdGQuanFwbG90LWN1cnNvci1sZWdlbmQt
bGFiZWwiKTtmb3IodmFyID0KQj0zRDA7QjxyLmxlbmd0aDtCKyspe3ZhciB2PTNEaihyW0JdKS5k
YXRhKCJzZXJpZXNJbmRleCIpO3ZhciB0PTNEQS5zZXJpZXNbPQp2XTt2YXIgcz0zRHQubGFiZWwu
dG9TdHJpbmcoKTt2YXIgRD0zRGouaW5BcnJheSh2LEcuaW5kaWNlcyk7dmFyIHg9M0R1bmRlZmk9
Cm5lZDt2YXIgdz0zRHVuZGVmaW5lZDtpZihEIT0zRC0xKXt2YXIgSD0zREcuZGF0YVtEXS5kYXRh
O2lmKEUudXNlQXhlc0Zvcm1hdD0KdGVycyl7dmFyIHk9M0R0Ll94YXhpcy5fdGlja3NbMF0uZm9y
bWF0dGVyO3ZhciBxPTNEdC5feWF4aXMuX3RpY2tzWzBdLmZvcm1hPQp0dGVyO3ZhciBGPTNEdC5f
eGF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt2YXIgdT0zRHQuX3lheGlzLl90aWNrc1swXS5m
b3I9Cm1hdFN0cmluZzt4PTNEeShGLEhbMF0pO3c9M0RxKHUsSFsxXSl9ZWxzZXt4PTNESFswXTt3
PTNESFsxXX19aWYoQS5sZWdlbmQuZT0Kc2NhcGVIdG1sKXtqKHJbQl0pLnRleHQoai5qcXBsb3Qu
c3ByaW50ZihFLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyxzLHgsdykpPQp9ZWxzZXtqKHJbQl0p
Lmh0bWwoai5qcXBsb3Quc3ByaW50ZihFLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyxzLHgsdykp
fX19ej0KPTNEbnVsbH1mdW5jdGlvbiBkKEEsRixFKXt2YXIgQj0zRHtpbmRpY2VzOltdLGRhdGE6
W119O3ZhciBHLHcsdSxDLHYscSx0O3ZhPQpyIHo7dmFyIEQ9M0RBLnBsdWdpbnMuY3Vyc29yO2Zv
cih2YXIgdz0zRDA7dzxBLnNlcmllcy5sZW5ndGg7dysrKXtHPTNEQS5zZXI9Cmllc1t3XTtxPTNE
Ry5yZW5kZXJlcjtpZihHLnNob3cpe3o9M0RELmludGVyc2VjdGlvblRocmVzaG9sZDtpZihHLnNo
b3dNYXJrZT0Kcil7eis9M0RHLm1hcmtlclJlbmRlcmVyLnNpemUvMn1mb3IodmFyIHY9M0QwO3Y8
Ry5ncmlkRGF0YS5sZW5ndGg7disrKXt0PTNEPQpHLmdyaWREYXRhW3ZdO2lmKEQuc2hvd1ZlcnRp
Y2FsTGluZSl7aWYoTWF0aC5hYnMoRi10WzBdKTw9M0R6KXtCLmluZGljZXMucHU9CnNoKHcpO0Iu
ZGF0YS5wdXNoKHtzZXJpZXNJbmRleDp3LHBvaW50SW5kZXg6dixncmlkRGF0YTp0LGRhdGE6Ry5k
YXRhW3ZdfSl9fT0KfX19cmV0dXJuIEJ9ZnVuY3Rpb24gbihyLHQpe3ZhciB2PTNEdC5wbHVnaW5z
LmN1cnNvcjt2YXIgcz0zRHYuX3Rvb2x0aXBFbGVtPQo7c3dpdGNoKHYudG9vbHRpcExvY2F0aW9u
KXtjYXNlIm53Ijp2YXIgcT0zRHIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0LXMub3V0ZXI9CldpZHRo
KHRydWUpLXYudG9vbHRpcE9mZnNldDt2YXIgdT0zRHIueSt0Ll9ncmlkUGFkZGluZy50b3Atdi50
b29sdGlwT2Zmc2V0LT0Kcy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm4iOnZhciBxPTNE
ci54K3QuX2dyaWRQYWRkaW5nLmxlZnQtcy5vdXRlcldpPQpkdGgodHJ1ZSkvMjt2YXIgdT0zRHIu
eSt0Ll9ncmlkUGFkZGluZy50b3Atdi50b29sdGlwT2Zmc2V0LXMub3V0ZXJIZWlnaHQodHI9CnVl
KTticmVhaztjYXNlIm5lIjp2YXIgcT0zRHIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0K3YudG9vbHRp
cE9mZnNldDt2YXIgdT0zRD0Kci55K3QuX2dyaWRQYWRkaW5nLnRvcC12LnRvb2x0aXBPZmZzZXQt
cy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlImUiOnZhPQpyIHE9M0RyLngrdC5fZ3JpZFBh
ZGRpbmcubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcudG89
CnAtcy5vdXRlckhlaWdodCh0cnVlKS8yO2JyZWFrO2Nhc2Uic2UiOnZhciBxPTNEci54K3QuX2dy
aWRQYWRkaW5nLmxlZnQrdi50bz0Kb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRp
bmcudG9wK3YudG9vbHRpcE9mZnNldDticmVhaztjYXNlInMiOnZhPQpyIHE9M0RyLngrdC5fZ3Jp
ZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgdT0zRHIueSt0Ll9ncmlkUGFk
ZGk9Cm5nLnRvcCt2LnRvb2x0aXBPZmZzZXQ7YnJlYWs7Y2FzZSJzdyI6dmFyIHE9M0RyLngrdC5f
Z3JpZFBhZGRpbmcubGVmdC1zLm91dD0KZXJXaWR0aCh0cnVlKS12LnRvb2x0aXBPZmZzZXQ7dmFy
IHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcudG9wK3YudG9vbHRpcE9mZnNlPQp0O2JyZWFrO2Nhc2Ui
dyI6dmFyIHE9M0RyLngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgodHJ1ZSktdi50
b29sdGk9CnBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcudG9wLXMub3V0ZXJIZWln
aHQodHJ1ZSkvMjticmVhaztkZWZhdWx0Oj0KdmFyIHE9M0RyLngrdC5fZ3JpZFBhZGRpbmcubGVm
dCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcuPQp0b3Ardi50b29s
dGlwT2Zmc2V0O2JyZWFrfXMuY3NzKCJsZWZ0IixxKTtzLmNzcygidG9wIix1KTtzPTNEbnVsbH1m
dW5jdGlvbiA9Cm0odSl7dmFyIHM9M0R1Ll9ncmlkUGFkZGluZzt2YXIgdj0zRHUucGx1Z2lucy5j
dXJzb3I7dmFyIHQ9M0R2Ll90b29sdGlwRWxlbT0KO3N3aXRjaCh2LnRvb2x0aXBMb2NhdGlvbil7
Y2FzZSJudyI6dmFyIHI9M0RzLmxlZnQrdi50b29sdGlwT2Zmc2V0O3ZhciBxPTNEPQpzLnRvcCt2
LnRvb2x0aXBPZmZzZXQ7dC5jc3MoImxlZnQiLHIpO3QuY3NzKCJ0b3AiLHEpO2JyZWFrO2Nhc2Ui
biI6dmFyIHI9M0Q9CihzLmxlZnQrKHUuX3Bsb3REaW1lbnNpb25zLndpZHRoLXMucmlnaHQpKS8y
LXQub3V0ZXJXaWR0aCh0cnVlKS8yO3ZhciBxPTNEcz0KLnRvcCt2LnRvb2x0aXBPZmZzZXQ7dC5j
c3MoImxlZnQiLHIpO3QuY3NzKCJ0b3AiLHEpO2JyZWFrO2Nhc2UibmUiOnZhciByPTNEPQpzLnJp
Z2h0K3YudG9vbHRpcE9mZnNldDt2YXIgcT0zRHMudG9wK3YudG9vbHRpcE9mZnNldDt0LmNzcyh7
cmlnaHQ6cix0b3A6cX09Cik7YnJlYWs7Y2FzZSJlIjp2YXIgcj0zRHMucmlnaHQrdi50b29sdGlw
T2Zmc2V0O3ZhciBxPTNEKHMudG9wKyh1Ll9wbG90RGltZT0KbnNpb25zLmhlaWdodC1zLmJvdHRv
bSkpLzItdC5vdXRlckhlaWdodCh0cnVlKS8yO3QuY3NzKHtyaWdodDpyLHRvcDpxfSk7YnJlPQph
aztjYXNlInNlIjp2YXIgcj0zRHMucmlnaHQrdi50b29sdGlwT2Zmc2V0O3ZhciBxPTNEcy5ib3R0
b20rdi50b29sdGlwT2Zmc2U9CnQ7dC5jc3Moe3JpZ2h0OnIsYm90dG9tOnF9KTticmVhaztjYXNl
InMiOnZhciByPTNEKHMubGVmdCsodS5fcGxvdERpbWVuc2lvbj0Kcy53aWR0aC1zLnJpZ2h0KSkv
Mi10Lm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgcT0zRHMuYm90dG9tK3YudG9vbHRpcE9mZnNldDt0
PQouY3NzKHtsZWZ0OnIsYm90dG9tOnF9KTticmVhaztjYXNlInN3Ijp2YXIgcj0zRHMubGVmdCt2
LnRvb2x0aXBPZmZzZXQ7dmFyIHE9Cj0zRHMuYm90dG9tK3YudG9vbHRpcE9mZnNldDt0LmNzcyh7
bGVmdDpyLGJvdHRvbTpxfSk7YnJlYWs7Y2FzZSJ3Ijp2YXIgcj0zRD0Kcy5sZWZ0K3YudG9vbHRp
cE9mZnNldDt2YXIgcT0zRChzLnRvcCsodS5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0LXMuYm90dG9t
KSkvPQoyLXQub3V0ZXJIZWlnaHQodHJ1ZSkvMjt0LmNzcyh7bGVmdDpyLHRvcDpxfSk7YnJlYWs7
ZGVmYXVsdDp2YXIgcj0zRHMucmlnaHQ9Ci12LnRvb2x0aXBPZmZzZXQ7dmFyIHE9M0RzLmJvdHRv
bSt2LnRvb2x0aXBPZmZzZXQ7dC5jc3Moe3JpZ2h0OnIsYm90dG9tOnF9KT0KO2JyZWFrfXQ9M0Ru
dWxsfWZ1bmN0aW9uIGsocixxLHYsdSx0KXtyLnByZXZlbnREZWZhdWx0KCk7ci5zdG9wSW1tZWRp
YXRlUHJvPQpwYWdhdGlvbigpO3ZhciB3PTNEdC5wbHVnaW5zLmN1cnNvcjtpZih3LmNsaWNrUmVz
ZXQpe3cucmVzZXRab29tKHQsdyl9dmFyIHM9Cj0zRHdpbmRvdy5nZXRTZWxlY3Rpb247aWYoZG9j
dW1lbnQuc2VsZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpe2RvYz0KdW1lbnQuc2Vs
ZWN0aW9uLmVtcHR5KCl9ZWxzZXtpZihzJiYhcygpLmlzQ29sbGFwc2VkKXtzKCkuY29sbGFwc2Uo
KX19cmV0dXJuPQogZmFsc2V9ZnVuY3Rpb24gYyhyLHEsdix1LHQpe3IucHJldmVudERlZmF1bHQo
KTtyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbig9Cik7dmFyIHc9M0R0LnBsdWdpbnMuY3Vyc29y
O2lmKHcuZGJsQ2xpY2tSZXNldCl7dy5yZXNldFpvb20odCx3KX12YXIgcz0zRHdpbj0KZG93Lmdl
dFNlbGVjdGlvbjtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0
eSl7ZG9jdW1lbnQuPQpzZWxlY3Rpb24uZW1wdHkoKX1lbHNle2lmKHMmJiFzKCkuaXNDb2xsYXBz
ZWQpe3MoKS5jb2xsYXBzZSgpfX1yZXR1cm4gZmFsc2U9Cn1mdW5jdGlvbiBmKHcsdCxxLHosdSl7
dmFyIHY9M0R1LnBsdWdpbnMuY3Vyc29yO3Yub25HcmlkPTNEZmFsc2U7aWYodi5zaG93KT0Ke2oo
dy50YXJnZXQpLmNzcygiY3Vyc29yIix2LnByZXZpb3VzQ3Vyc29yKTtpZih2LnNob3dUb29sdGlw
JiYhKHYuX3pvb20uem9vPQptaW5nJiZ2LnNob3dUb29sdGlwT3V0c2lkZVpvb20mJiF2LmNvbnN0
cmFpbk91dHNpZGVab29tKSl7di5fdG9vbHRpcEVsZW0uZW09CnB0eSgpO3YuX3Rvb2x0aXBFbGVt
LmhpZGUoKX1pZih2Lnpvb20pe3YuX3pvb20uZ3JpZHBvcz0zRHQ7di5fem9vbS5kYXRhcG9zPQo9
M0RxfWlmKHYuc2hvd1ZlcnRpY2FsTGluZXx8di5zaG93SG9yaXpvbnRhbExpbmUpe3ZhciBCPTNE
di5jdXJzb3JDYW52YXMuX2M9CnR4O0IuY2xlYXJSZWN0KDAsMCxCLmNhbnZhcy53aWR0aCxCLmNh
bnZhcy5oZWlnaHQpO0I9M0RudWxsfWlmKHYuc2hvd0N1cnNvcj0KTGVnZW5kKXt2YXIgQT0zRGoo
dS50YXJnZXRJZCsiIHRkLmpxcGxvdC1jdXJzb3ItbGVnZW5kLWxhYmVsIik7Zm9yKHZhciBzPTNE
PQowO3M8QS5sZW5ndGg7cysrKXt2YXIgeT0zRGooQVtzXSkuZGF0YSgic2VyaWVzSW5kZXgiKTt2
YXIgcj0zRHUuc2VyaWVzW3ldO3Y9CmFyIHg9M0RyLmxhYmVsLnRvU3RyaW5nKCk7aWYodS5sZWdl
bmQuZXNjYXBlSHRtbCl7aihBW3NdKS50ZXh0KGouanFwbG90LnNwcj0KaW50Zih2LmN1cnNvckxl
Z2VuZEZvcm1hdFN0cmluZyx4LHVuZGVmaW5lZCx1bmRlZmluZWQpKX1lbHNle2ooQVtzXSkuaHRt
bChqPQouanFwbG90LnNwcmludGYodi5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcseCx1bmRlZmlu
ZWQsdW5kZWZpbmVkKSl9fX19fWZ1bmM9CnRpb24gYihyLHEsdSx0LHMpe3ZhciB2PTNEcy5wbHVn
aW5zLmN1cnNvcjt2Lm9uR3JpZD0zRHRydWU7aWYodi5zaG93KXt2LnByZT0KdmlvdXNDdXJzb3I9
M0RyLnRhcmdldC5zdHlsZS5jdXJzb3I7ci50YXJnZXQuc3R5bGUuY3Vyc29yPTNEdi5zdHlsZTtp
Zih2LnNoPQpvd1Rvb2x0aXApe2UocSx1LHMpO2lmKHYuZm9sbG93TW91c2Upe24ocSxzKX1lbHNl
e20ocyl9di5fdG9vbHRpcEVsZW0uc2hvdyg9Cil9aWYodi5zaG93VmVydGljYWxMaW5lfHx2LnNo
b3dIb3Jpem9udGFsTGluZSl7ZyhxLHMpfX19ZnVuY3Rpb24gaShyLHEsdSx0LD0Kcyl7dmFyIHY9
M0RzLnBsdWdpbnMuY3Vyc29yO2lmKHYuc2hvdyl7aWYodi5zaG93VG9vbHRpcCl7ZShxLHUscyk7
aWYodi5mb2xsPQpvd01vdXNlKXtuKHEscyl9fWlmKHYuc2hvd1ZlcnRpY2FsTGluZXx8di5zaG93
SG9yaXpvbnRhbExpbmUpe2cocSxzKX19fWZ1bmM9CnRpb24gbyh5KXt2YXIgeD0zRHkuZGF0YS5w
bG90O3ZhciB0PTNEeC5ldmVudENhbnZhcy5fZWxlbS5vZmZzZXQoKTt2YXIgdz0zRD0Ke3g6eS5w
YWdlWC10LmxlZnQseTp5LnBhZ2VZLXQudG9wfTt2YXIgdT0zRHt4YXhpczpudWxsLHlheGlzOm51
bGwseDJheGlzOm51PQpsbCx5MmF4aXM6bnVsbCx5M2F4aXM6bnVsbCx5NGF4aXM6bnVsbCx5NWF4
aXM6bnVsbCx5NmF4aXM6bnVsbCx5N2F4aXM6bnVsbCw9Cnk4YXhpczpudWxsLHk5YXhpczpudWxs
LHlNaWRBeGlzOm51bGx9O3ZhciB2PTNEWyJ4YXhpcyIsInlheGlzIiwieDJheGlzIiwieT0KMmF4
aXMiLCJ5M2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMiLCJ5NmF4aXMiLCJ5N2F4aXMiLCJ5OGF4aXMi
LCJ5OWF4aXMiLCJ5TWlkPQpBeGlzIl07dmFyIHE9M0R4LmF4ZXM7dmFyIHIscztmb3Iocj0zRDEx
O3I+MDtyLS0pe3M9M0R2W3ItMV07aWYocVtzXS5zaG93KXs9CnVbc109M0RxW3NdLnNlcmllc19w
MnUod1tzLmNoYXJBdCgwKV0pfX1yZXR1cm57b2Zmc2V0czp0LGdyaWRQb3M6dyxkYXRhUG9zOj0K
dX19ZnVuY3Rpb24gaCh6KXt2YXIgeD0zRHouZGF0YS5wbG90O3ZhciB5PTNEeC5wbHVnaW5zLmN1
cnNvcjtpZih5LnNob3cmJnkuPQp6b29tJiZ5Ll96b29tLnN0YXJ0ZWQmJiF5Lnpvb21UYXJnZXQp
e3oucHJldmVudERlZmF1bHQoKTt2YXIgQj0zRHkuem9vbUNhbnY9CmFzLl9jdHg7dmFyIHY9M0Rv
KHopO3ZhciB3PTNEdi5ncmlkUG9zO3ZhciB0PTNEdi5kYXRhUG9zO3kuX3pvb20uZ3JpZHBvcz0z
RD0Kdzt5Ll96b29tLmRhdGFwb3M9M0R0O3kuX3pvb20uem9vbWluZz0zRHRydWU7dmFyIHU9M0R3
Lng7dmFyIHM9M0R3Lnk7dmFyIEE9Cj0zREIuY2FudmFzLmhlaWdodDt2YXIgcT0zREIuY2FudmFz
LndpZHRoO2lmKHkuc2hvd1Rvb2x0aXAmJiF5Lm9uR3JpZCYmeS5zaD0Kb3dUb29sdGlwT3V0c2lk
ZVpvb20pe2Uodyx0LHgpO2lmKHkuZm9sbG93TW91c2Upe24odyx4KX19aWYoeS5jb25zdHJhaW5a
b29tPQpUbz0zRD0zRCJ4Iil7eS5fem9vbS5lbmQ9M0RbdSxBXX1lbHNle2lmKHkuY29uc3RyYWlu
Wm9vbVRvPTNEPTNEInkiKXt5Ll96b289Cm0uZW5kPTNEW3Esc119ZWxzZXt5Ll96b29tLmVuZD0z
RFt1LHNdfX12YXIgcj0zRHdpbmRvdy5nZXRTZWxlY3Rpb247aWYoZG9jdT0KbWVudC5zZWxlY3Rp
b24mJmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSl7ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCl9
ZWxzZXtpPQpmKHImJiFyKCkuaXNDb2xsYXBzZWQpe3IoKS5jb2xsYXBzZSgpfX1sLmNhbGwoeSk7
Qj0zRG51bGx9fWZ1bmN0aW9uIGEodyxzLHI9Cix4LHQpe3ZhciB2PTNEdC5wbHVnaW5zLmN1cnNv
cjtpZih0LnBsdWdpbnMubW9iaWxlKXtqKGRvY3VtZW50KS5vbmUoInZtb3VzZT0KdXAuanFwbG90
X2N1cnNvciIse3Bsb3Q6dH0scCl9ZWxzZXtqKGRvY3VtZW50KS5vbmUoIm1vdXNldXAuanFwbG90
X2N1cnNvciIsPQp7cGxvdDp0fSxwKX12YXIgdT0zRHQuYXhlcztpZihkb2N1bWVudC5vbnNlbGVj
dHN0YXJ0IT0zRHVuZGVmaW5lZCl7di5fb2xkSGE9Cm5kbGVycy5vbnNlbGVjdHN0YXJ0PTNEZG9j
dW1lbnQub25zZWxlY3RzdGFydDtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PTNEZnVuYz0KdGlvbigp
e3JldHVybiBmYWxzZX19aWYoZG9jdW1lbnQub25kcmFnIT0zRHVuZGVmaW5lZCl7di5fb2xkSGFu
ZGxlcnMub25kcmFnPQo9M0Rkb2N1bWVudC5vbmRyYWc7ZG9jdW1lbnQub25kcmFnPTNEZnVuY3Rp
b24oKXtyZXR1cm4gZmFsc2V9fWlmKGRvY3VtZW50Lm89Cm5tb3VzZWRvd24hPTNEdW5kZWZpbmVk
KXt2Ll9vbGRIYW5kbGVycy5vbm1vdXNlZG93bj0zRGRvY3VtZW50Lm9ubW91c2Vkb3duOz0KZG9j
dW1lbnQub25tb3VzZWRvd249M0RmdW5jdGlvbigpe3JldHVybiBmYWxzZX19aWYodi56b29tKXtp
Zighdi56b29tUHJveHkpPQp7dmFyIHk9M0R2Lnpvb21DYW52YXMuX2N0eDt5LmNsZWFyUmVjdCgw
LDAseS5jYW52YXMud2lkdGgseS5jYW52YXMuaGVpZ2h0KTs9Cnk9M0RudWxsfWlmKHYuY29uc3Ry
YWluWm9vbVRvPTNEPTNEIngiKXt2Ll96b29tLnN0YXJ0PTNEW3MueCwwXX1lbHNle2lmKHYuYz0K
b25zdHJhaW5ab29tVG89M0Q9M0QieSIpe3YuX3pvb20uc3RhcnQ9M0RbMCxzLnldfWVsc2V7di5f
em9vbS5zdGFydD0zRFtzLngsPQpzLnldfX12Ll96b29tLnN0YXJ0ZWQ9M0R0cnVlO2Zvcih2YXIg
cSBpbiByKXt2Ll96b29tLmF4ZXMuc3RhcnRbcV09M0RyW3FdfWk9CmYodC5wbHVnaW5zLm1vYmls
ZSl7aihkb2N1bWVudCkuYmluZCgidm1vdXNlbW92ZS5qcXBsb3RDdXJzb3IiLHtwbG90OnR9LGgp
fT0KZWxzZXtqKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuanFwbG90Q3Vyc29yIix7cGxvdDp0
fSxoKX19fWZ1bmN0aW9uIHAoeSl7PQp2YXIgdj0zRHkuZGF0YS5wbG90O3ZhciB4PTNEdi5wbHVn
aW5zLmN1cnNvcjtpZih4Lnpvb20mJnguX3pvb20uem9vbWluZyYmIXg9Ci56b29tVGFyZ2V0KXt2
YXIgdT0zRHguX3pvb20uZ3JpZHBvcy54O3ZhciByPTNEeC5fem9vbS5ncmlkcG9zLnk7dmFyIHQ9
M0R4Lj0KX3pvb20uZGF0YXBvczt2YXIgej0zRHguem9vbUNhbnZhcy5fY3R4LmNhbnZhcy5oZWln
aHQ7dmFyIHE9M0R4Lnpvb21DYW52YXMuPQpfY3R4LmNhbnZhcy53aWR0aDt2YXIgdz0zRHYuYXhl
cztpZih4LmNvbnN0cmFpbk91dHNpZGVab29tJiYheC5vbkdyaWQpe2lmKHU9CjwwKXt1PTNEMH1l
bHNle2lmKHU+cSl7dT0zRHF9fWlmKHI8MCl7cj0zRDB9ZWxzZXtpZihyPnope3I9M0R6fX1mb3Io
dmFyIHMgaT0KbiB0KXtpZih0W3NdKXtpZihzLmNoYXJBdCgwKT0zRD0zRCJ4Iil7dFtzXT0zRHdb
c10uc2VyaWVzX3AydSh1KX1lbHNle3Rbc109Cj0zRHdbc10uc2VyaWVzX3AydShyKX19fX1pZih4
LmNvbnN0cmFpblpvb21Ubz0zRD0zRCJ4Iil7cj0zRHp9ZWxzZXtpZih4LmNvbj0Kc3RyYWluWm9v
bVRvPTNEPTNEInkiKXt1PTNEcX19eC5fem9vbS5lbmQ9M0RbdSxyXTt4Ll96b29tLmdyaWRwb3M9
M0R7eDp1LHk6PQpyfTt4LmRvWm9vbSh4Ll96b29tLmdyaWRwb3MsdCx2LHgpfXguX3pvb20uc3Rh
cnRlZD0zRGZhbHNlO3guX3pvb20uem9vbWluZz0KPTNEZmFsc2U7aihkb2N1bWVudCkudW5iaW5k
KCJtb3VzZW1vdmUuanFwbG90Q3Vyc29yIixoKTtpZihkb2N1bWVudC5vbnNlbGVjPQp0c3RhcnQh
PTNEdW5kZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbnNlbGVjdHN0YXJ0IT0zRG51bGwpe2RvY3Vt
ZW50Lm9uc2VsZWM9CnRzdGFydD0zRHguX29sZEhhbmRsZXJzLm9uc2VsZWN0c3RhcnQ7eC5fb2xk
SGFuZGxlcnMub25zZWxlY3RzdGFydD0zRG51bGx9aT0KZihkb2N1bWVudC5vbmRyYWchPTNEdW5k
ZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbmRyYWchPTNEbnVsbCl7ZG9jdW1lbnQub25kPQpyYWc9
M0R4Ll9vbGRIYW5kbGVycy5vbmRyYWc7eC5fb2xkSGFuZGxlcnMub25kcmFnPTNEbnVsbH1pZihk
b2N1bWVudC5vbm1vdXM9CmVkb3duIT0zRHVuZGVmaW5lZCYmeC5fb2xkSGFuZGxlcnMub25tb3Vz
ZWRvd24hPTNEbnVsbCl7ZG9jdW1lbnQub25tb3VzZWRvdz0Kbj0zRHguX29sZEhhbmRsZXJzLm9u
bW91c2Vkb3duO3guX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duPTNEbnVsbH19ZnVuY3Rpb24gPQps
KCl7dmFyIHk9M0R0aGlzLl96b29tLnN0YXJ0O3ZhciB1PTNEdGhpcy5fem9vbS5lbmQ7dmFyIHM9
M0R0aGlzLnpvb21DYW52YXM9Ci5fY3R4O3ZhciByLHYseCxxO2lmKHVbMF0+eVswXSl7cj0zRHlb
MF07cT0zRHVbMF0teVswXX1lbHNle3I9M0R1WzBdO3E9M0R5Wz0KMF0tdVswXX1pZih1WzFdPnlb
MV0pe3Y9M0R5WzFdO3g9M0R1WzFdLXlbMV19ZWxzZXt2PTNEdVsxXTt4PTNEeVsxXS11WzFdfXMu
PQpmaWxsU3R5bGU9M0QicmdiYSgwLDAsMCwwLjIpIjtzLnN0cm9rZVN0eWxlPTNEIiM5OTk5OTki
O3MubGluZVdpZHRoPTNEMTtzLmM9CmxlYXJSZWN0KDAsMCxzLmNhbnZhcy53aWR0aCxzLmNhbnZh
cy5oZWlnaHQpO3MuZmlsbFJlY3QoMCwwLHMuY2FudmFzLndpZHRoLD0Kcy5jYW52YXMuaGVpZ2h0
KTtzLmNsZWFyUmVjdChyLHYscSx4KTtzLnN0cm9rZVJlY3Qocix2LHEseCk7cz0zRG51bGx9ai5q
cXBsPQpvdC5DdXJzb3JMZWdlbmRSZW5kZXJlcj0zRGZ1bmN0aW9uKHEpe2ouanFwbG90LlRhYmxl
TGVnZW5kUmVuZGVyZXIuY2FsbCh0aGk9CnMscSk7dGhpcy5mb3JtYXRTdHJpbmc9M0QiJXMifTtq
LmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlci5wcm90b3R5cGU9M0RuZT0KdyBqLmpxcGxvdC5U
YWJsZUxlZ2VuZFJlbmRlcmVyKCk7ai5qcXBsb3QuQ3Vyc29yTGVnZW5kUmVuZGVyZXIucHJvdG90
eXBlLmNvPQpuc3RydWN0b3I9M0RqLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlcjtqLmpxcGxv
dC5DdXJzb3JMZWdlbmRSZW5kZXJlci5wcm89CnRvdHlwZS5kcmF3PTNEZnVuY3Rpb24oKXtpZih0
aGlzLl9lbGVtKXt0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLl9lbGVtPQo9M0RudWxsfWlm
KHRoaXMuc2hvdyl7dmFyIHc9M0R0aGlzLl9zZXJpZXMsQTt2YXIgcj0zRGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQ9CigidGFibGUiKTt0aGlzLl9lbGVtPTNEaihyKTtyPTNEbnVsbDt0aGlzLl9lbGVt
LmFkZENsYXNzKCJqcXBsb3QtbGVnZW5kIGpxcD0KbG90LWN1cnNvci1sZWdlbmQiKTt0aGlzLl9l
bGVtLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3ZhciBxPTNEZmFsc2U7Zm9yPQoodmFyIHg9
M0QwO3g8dy5sZW5ndGg7eCsrKXtBPTNEd1t4XTtpZihBLnNob3cmJkEuc2hvd0xhYmVsKXt2YXIg
dj0zRGouanFwbG89CnQuc3ByaW50Zih0aGlzLmZvcm1hdFN0cmluZyxBLmxhYmVsLnRvU3RyaW5n
KCkpO2lmKHYpe3ZhciB0PTNEQS5jb2xvcjtpZihBLj0KX3N0YWNrJiYhQS5maWxsKXt0PTNEIiJ9
ei5jYWxsKHRoaXMsdix0LHEseCk7cT0zRHRydWV9Zm9yKHZhciB1PTNEMDt1PGouanFwPQpsb3Qu
YWRkTGVnZW5kUm93SG9va3MubGVuZ3RoO3UrKyl7dmFyIHk9M0RqLmpxcGxvdC5hZGRMZWdlbmRS
b3dIb29rc1t1XS5jYWw9CmwodGhpcyxBKTtpZih5KXt6LmNhbGwodGhpcyx5LmxhYmVsLHkuY29s
b3IscSk7cT0zRHRydWV9fX19dz0zREE9M0RudWxsO2RlbD0KZXRlIHc7ZGVsZXRlIEF9ZnVuY3Rp
b24geihELEMsRixzKXt2YXIgQj0zRChGKT90aGlzLnJvd1NwYWNpbmc6IjAiO3ZhciBFPTNEPQpq
KCc8dHIgY2xhc3M9M0QianFwbG90LWxlZ2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2VuZCI+PC90cj4n
KS5hcHBlbmRUbyh0aGlzLl89CmVsZW0pO0UuZGF0YSgic2VyaWVzSW5kZXgiLHMpO2ooJzx0ZCBj
bGFzcz0zRCJqcXBsb3QtbGVnZW5kIGpxcGxvdC1jdXJzb3ItbD0KZWdlbmQtc3dhdGNoIiBzdHls
ZT0zRCJwYWRkaW5nLXRvcDonK0IrJzsiPjxkaXYgc3R5bGU9M0QiYm9yZGVyOjFweCBzb2xpZCAj
PQpjY2NjY2M7cGFkZGluZzowLjJlbTsiPjxkaXYgY2xhc3M9M0QianFwbG90LWN1cnNvci1sZWdl
bmQtc3dhdGNoIiBzdHlsZT0zRCI9CmJhY2tncm91bmQtY29sb3I6JytDKyc7Ij48L2Rpdj48L2Rp
dj48L3RkPicpLmFwcGVuZFRvKEUpO3ZhciBHPTNEaignPHRkIGNsYT0Kc3M9M0QianFwbG90LWxl
Z2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2VuZC1sYWJlbCIgc3R5bGU9M0QidmVydGljYWwtYWxpZ246
bWlkPQpkbGU7cGFkZGluZy10b3A6JytCKyc7Ij48L3RkPicpO0cuYXBwZW5kVG8oRSk7Ry5kYXRh
KCJzZXJpZXNJbmRleCIscyk7aWYodGg9CmlzLmVzY2FwZUh0bWwpe0cudGV4dChEKX1lbHNle0cu
aHRtbChEKX1FPTNEbnVsbDtHPTNEbnVsbH1yZXR1cm4gdGhpcy5fZWxlbT0KfX0pKGpRdWVyeSk7
LyoganFQbG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBs
b3QuY29tCisgICBqc0RhdGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvCisgKi8oZnVu
Y3Rpb24oZCl7ZC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWyJqcXBsb3RNb3VzZU1v
dmUiLGZdKTtkLj0KanFwbG90LkhpZ2hsaWdodGVyPTNEZnVuY3Rpb24oaCl7dGhpcy5zaG93PTNE
ZC5qcXBsb3QuY29uZmlnLmVuYWJsZVBsdWdpbnM7PQp0aGlzLm1hcmtlclJlbmRlcmVyPTNEbmV3
IGQuanFwbG90Lk1hcmtlclJlbmRlcmVyKHtzaGFkb3c6ZmFsc2V9KTt0aGlzLnNob3c9Ck1hcmtl
cj0zRHRydWU7dGhpcy5saW5lV2lkdGhBZGp1c3Q9M0QyLjU7dGhpcy5zaXplQWRqdXN0PTNENTt0
aGlzLnNob3dUb29sdD0KaXA9M0R0cnVlO3RoaXMudG9vbHRpcExvY2F0aW9uPTNEIm53Ijt0aGlz
LmZhZGVUb29sdGlwPTNEdHJ1ZTt0aGlzLnRvb2x0aXBGPQphZGVTcGVlZD0zRCJmYXN0Ijt0aGlz
LnRvb2x0aXBPZmZzZXQ9M0QyO3RoaXMudG9vbHRpcEF4ZXM9M0QiYm90aCI7dGhpcy50b289Cmx0
aXBTZXBhcmF0b3I9M0QiLCAiO3RoaXMudG9vbHRpcENvbnRlbnRFZGl0b3I9M0RudWxsO3RoaXMu
dXNlQXhlc0Zvcm1hdHRlcj0Kcz0zRHRydWU7dGhpcy50b29sdGlwRm9ybWF0U3RyaW5nPTNEIiUu
NVAiO3RoaXMuZm9ybWF0U3RyaW5nPTNEbnVsbDt0aGlzLnl2PQphbHVlcz0zRDE7dGhpcy5icmlu
Z1Nlcmllc1RvRnJvbnQ9M0RmYWxzZTt0aGlzLl90b29sdGlwRWxlbTt0aGlzLmlzSGlnaGxpZ2g9
CnRpbmc9M0RmYWxzZTt0aGlzLmN1cnJlbnROZWlnaGJvcj0zRG51bGw7ZC5leHRlbmQodHJ1ZSx0
aGlzLGgpfTt2YXIgYj0zRFsibj0KdyIsIm4iLCJuZSIsImUiLCJzZSIsInMiLCJzdyIsInciXTt2
YXIgZT0zRHtudzowLG46MSxuZToyLGU6MyxzZTo0LHM6NSxzdzo2PQosdzo3fTt2YXIgYz0zRFsi
c2UiLCJzIiwic3ciLCJ3IiwibnciLCJuIiwibmUiLCJlIl07ZC5qcXBsb3QuSGlnaGxpZ2h0ZXIu
aW49Cml0PTNEZnVuY3Rpb24oayxqLGkpe3ZhciBoPTNEaXx8e307dGhpcy5wbHVnaW5zLmhpZ2hs
aWdodGVyPTNEbmV3IGQuanFwbG90Lj0KSGlnaGxpZ2h0ZXIoaC5oaWdobGlnaHRlcil9O2QuanFw
bG90LkhpZ2hsaWdodGVyLnBhcnNlT3B0aW9ucz0zRGZ1bmN0aW9uKGksPQpoKXt0aGlzLnNob3dI
aWdobGlnaHQ9M0R0cnVlfTtkLmpxcGxvdC5IaWdobGlnaHRlci5wb3N0UGxvdERyYXc9M0RmdW5j
dGlvbig9Cil7aWYodGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyJiZ0aGlzLnBsdWdpbnMuaGlnaGxp
Z2h0ZXIuaGlnaGxpZ2h0Q2FudmFzKXt0aD0KaXMucGx1Z2lucy5oaWdobGlnaHRlci5oaWdobGln
aHRDYW52YXMucmVzZXRDYW52YXMoKTt0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0PQplci5oaWdobGln
aHRDYW52YXM9M0RudWxsfWlmKHRoaXMucGx1Z2lucy5oaWdobGlnaHRlciYmdGhpcy5wbHVnaW5z
LmhpZ2hsaWc9Cmh0ZXIuX3Rvb2x0aXBFbGVtKXt0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rv
b2x0aXBFbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLj0KcGx1Z2lucy5oaWdobGlnaHRlci5fdG9vbHRp
cEVsZW09M0RudWxsfXRoaXMucGx1Z2lucy5oaWdobGlnaHRlci5oaWdobGlnaHRDPQphbnZhcz0z
RG5ldyBkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZhcy5fZWxlbS5iZWZv
cmUodGhpcy5wbHU9CmdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzLmNyZWF0ZUVsZW1l
bnQodGhpcy5fZ3JpZFBhZGRpbmcsImpxcGxvdC1oaT0KZ2hsaWdodC1jYW52YXMiLHRoaXMuX3Bs
b3REaW1lbnNpb25zLHRoaXMpKTt0aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuaGlnaGxpPQpnaHRD
YW52YXMuc2V0Q29udGV4dCgpO3ZhciBoPTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
dGhpcy5wbHVnaW5zLmg9CmlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtPTNEZChoKTtoPTNEbnVsbDt0
aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbD0KZW0uYWRkQ2xhc3MoImpxcGxvdC1o
aWdobGlnaHRlci10b29sdGlwIik7dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwPQpF
bGVtLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIn0pO3RoaXMuZXZlbnRD
YW52YXMuX2VsZW0uYmVmb3I9CmUodGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxl
bSl9O2QuanFwbG90LnByZUluaXRIb29rcy5wdXNoKGQuanFwbD0Kb3QuSGlnaGxpZ2h0ZXIuaW5p
dCk7ZC5qcXBsb3QucHJlUGFyc2VTZXJpZXNPcHRpb25zSG9va3MucHVzaChkLmpxcGxvdC5IaWdo
PQpsaWdodGVyLnBhcnNlT3B0aW9ucyk7ZC5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKGQuanFw
bG90LkhpZ2hsaWdodGVyLnBvc3Q9ClBsb3REcmF3KTtmdW5jdGlvbiBhKG0sbyl7dmFyIGo9M0Rt
LnBsdWdpbnMuaGlnaGxpZ2h0ZXI7dmFyIHA9M0RtLnNlcmllc1tvLj0Kc2VyaWVzSW5kZXhdO3Zh
ciBoPTNEcC5tYXJrZXJSZW5kZXJlcjt2YXIgaT0zRGoubWFya2VyUmVuZGVyZXI7aS5zdHlsZT0z
RGguPQpzdHlsZTtpLmxpbmVXaWR0aD0zRGgubGluZVdpZHRoK2oubGluZVdpZHRoQWRqdXN0O2ku
c2l6ZT0zRGguc2l6ZStqLnNpemVBZGo9CnVzdDt2YXIgbD0zRGQuanFwbG90LmdldENvbG9yQ29t
cG9uZW50cyhoLmNvbG9yKTt2YXIgbj0zRFtsWzBdLGxbMV0sbFsyXV07dj0KYXIgaz0zRChsWzNd
Pj0zRDAuNik/bFszXSowLjY6bFszXSooMi1sWzNdKTtpLmNvbG9yPTNEInJnYmEoIituWzBdKyIs
IituWzFdPQorIiwiK25bMl0rIiwiK2srIikiO2kuaW5pdCgpO2kuZHJhdyhwLmdyaWREYXRhW28u
cG9pbnRJbmRleF1bMF0scC5ncmlkRGF0YVs9Cm8ucG9pbnRJbmRleF1bMV0sai5oaWdobGlnaHRD
YW52YXMuX2N0eCl9ZnVuY3Rpb24gZyhBLHEsbSl7dmFyIGs9M0RBLnBsdWdpbj0Kcy5oaWdobGln
aHRlcjt2YXIgRD0zRGsuX3Rvb2x0aXBFbGVtO3ZhciByPTNEcS5oaWdobGlnaHRlcnx8e307dmFy
IHQ9M0RkLmV4PQp0ZW5kKHRydWUse30sayxyKTtpZih0LnVzZUF4ZXNGb3JtYXR0ZXJzKXt2YXIg
dz0zRHEuX3hheGlzLl90aWNrc1swXS5mb3JtYXQ9CnRlcjt2YXIgaD0zRHEuX3lheGlzLl90aWNr
c1swXS5mb3JtYXR0ZXI7dmFyIEU9M0RxLl94YXhpcy5fdGlja3NbMF0uZm9ybWF0Uz0KdHJpbmc7
dmFyIHM9M0RxLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0U3RyaW5nO3ZhciB6O3ZhciB1PTNEdyhF
LG0uZGF0YVswXSk7PQp2YXIgbD0zRFtdO2Zvcih2YXIgQj0zRDE7Qjx0Lnl2YWx1ZXMrMTtCKysp
e2wucHVzaChoKHMsbS5kYXRhW0JdKSl9aWYodHlwZW89CmYgdC5mb3JtYXRTdHJpbmc9M0Q9M0Q9
M0Qic3RyaW5nIil7c3dpdGNoKHQudG9vbHRpcEF4ZXMpe2Nhc2UiYm90aCI6Y2FzZSJ4eT0KIjps
LnVuc2hpZnQodSk7bC51bnNoaWZ0KHQuZm9ybWF0U3RyaW5nKTt6PTNEZC5qcXBsb3Quc3ByaW50
Zi5hcHBseShkLmpxcGxvPQp0LnNwcmludGYsbCk7YnJlYWs7Y2FzZSJ5eCI6bC5wdXNoKHUpO2wu
dW5zaGlmdCh0LmZvcm1hdFN0cmluZyk7ej0zRGQuanFwbG89CnQuc3ByaW50Zi5hcHBseShkLmpx
cGxvdC5zcHJpbnRmLGwpO2JyZWFrO2Nhc2UieCI6ej0zRGQuanFwbG90LnNwcmludGYuYXBwbD0K
eShkLmpxcGxvdC5zcHJpbnRmLFt0LmZvcm1hdFN0cmluZyx1XSk7YnJlYWs7Y2FzZSJ5IjpsLnVu
c2hpZnQodC5mb3JtYXRTdHJpPQpuZyk7ej0zRGQuanFwbG90LnNwcmludGYuYXBwbHkoZC5qcXBs
b3Quc3ByaW50ZixsKTticmVhaztkZWZhdWx0OmwudW5zaGlmdCg9CnUpO2wudW5zaGlmdCh0LmZv
cm1hdFN0cmluZyk7ej0zRGQuanFwbG90LnNwcmludGYuYXBwbHkoZC5qcXBsb3Quc3ByaW50Zixs
KT0KO2JyZWFrfX1lbHNle3N3aXRjaCh0LnRvb2x0aXBBeGVzKXtjYXNlImJvdGgiOmNhc2UieHki
Ono9M0R1O2Zvcih2YXIgQj0zRDA7PQpCPGwubGVuZ3RoO0IrKyl7eis9M0R0LnRvb2x0aXBTZXBh
cmF0b3IrbFtCXX1icmVhaztjYXNlInl4Ijp6PTNEIiI7Zm9yKHZhciA9CkI9M0QwO0I8bC5sZW5n
dGg7QisrKXt6Kz0zRGxbQl0rdC50b29sdGlwU2VwYXJhdG9yfXorPTNEdTticmVhaztjYXNlIngi
Ono9Cj0zRHU7YnJlYWs7Y2FzZSJ5Ijp6PTNEbC5qb2luKHQudG9vbHRpcFNlcGFyYXRvcik7YnJl
YWs7ZGVmYXVsdDp6PTNEdTtmb3Iodj0KYXIgQj0zRDA7QjxsLmxlbmd0aDtCKyspe3orPTNEdC50
b29sdGlwU2VwYXJhdG9yK2xbQl19YnJlYWt9fX1lbHNle3ZhciB6O2lmPQoodHlwZW9mIHQuZm9y
bWF0U3RyaW5nPTNEPTNEPTNEInN0cmluZyIpe3o9M0RkLmpxcGxvdC5zcHJpbnRmLmFwcGx5KGQu
anFwbG89CnQuc3ByaW50ZixbdC5mb3JtYXRTdHJpbmddLmNvbmNhdChtLmRhdGEpKX1lbHNle2lm
KHQudG9vbHRpcEF4ZXM9M0Q9M0QiYm90aD0KInx8dC50b29sdGlwQXhlcz0zRD0zRCJ4eSIpe3o9
M0RkLmpxcGxvdC5zcHJpbnRmKHQudG9vbHRpcEZvcm1hdFN0cmluZyxtLmRhPQp0YVswXSkrdC50
b29sdGlwU2VwYXJhdG9yK2QuanFwbG90LnNwcmludGYodC50b29sdGlwRm9ybWF0U3RyaW5nLG0u
ZGF0YVsxXSk9Cn1lbHNle2lmKHQudG9vbHRpcEF4ZXM9M0Q9M0QieXgiKXt6PTNEZC5qcXBsb3Qu
c3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJpbj0KZyxtLmRhdGFbMV0pK3QudG9vbHRpcFNlcGFy
YXRvcitkLmpxcGxvdC5zcHJpbnRmKHQudG9vbHRpcEZvcm1hdFN0cmluZyxtLmRhPQp0YVswXSl9
ZWxzZXtpZih0LnRvb2x0aXBBeGVzPTNEPTNEIngiKXt6PTNEZC5qcXBsb3Quc3ByaW50Zih0LnRv
b2x0aXBGb3JtYXQ9ClN0cmluZyxtLmRhdGFbMF0pfWVsc2V7aWYodC50b29sdGlwQXhlcz0zRD0z
RCJ5Iil7ej0zRGQuanFwbG90LnNwcmludGYodC50bz0Kb2x0aXBGb3JtYXRTdHJpbmcsbS5kYXRh
WzFdKX19fX19fWlmKGQuaXNGdW5jdGlvbih0LnRvb2x0aXBDb250ZW50RWRpdG9yKSl7PQp6PTNE
dC50b29sdGlwQ29udGVudEVkaXRvcih6LG0uc2VyaWVzSW5kZXgsbS5wb2ludEluZGV4LEEpfUQu
aHRtbCh6KTt2YXIgQz0KPTNEe3g6bS5ncmlkRGF0YVswXSx5Om0uZ3JpZERhdGFbMV19O3ZhciB2
PTNEMDt2YXIgaj0zRDAuNzA3O2lmKHEubWFya2VyUmVuPQpkZXJlci5zaG93PTNEPTNEdHJ1ZSl7
dj0zRChxLm1hcmtlclJlbmRlcmVyLnNpemUrdC5zaXplQWRqdXN0KS8yfXZhciBvPTNEYjs9Cmlm
KHEuZmlsbFRvWmVybyYmcS5maWxsJiZtLmRhdGFbMV08MCl7bz0zRGN9c3dpdGNoKG9bZVt0LnRv
b2x0aXBMb2NhdGlvbl1dKT0Ke2Nhc2UibnciOnZhciBwPTNEQy54K0EuX2dyaWRQYWRkaW5nLmxl
ZnQtRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcE9mZnNlPQp0LWoqdjt2YXIgbj0zREMueStB
Ll9ncmlkUGFkZGluZy50b3AtdC50b29sdGlwT2Zmc2V0LUQub3V0ZXJIZWlnaHQodHJ1ZSktaio9
CnY7YnJlYWs7Y2FzZSJuIjp2YXIgcD0zREMueCtBLl9ncmlkUGFkZGluZy5sZWZ0LUQub3V0ZXJX
aWR0aCh0cnVlKS8yO3ZhciBuPQo9M0RDLnkrQS5fZ3JpZFBhZGRpbmcudG9wLXQudG9vbHRpcE9m
ZnNldC1ELm91dGVySGVpZ2h0KHRydWUpLXY7YnJlYWs7Y2FzZSI9Cm5lIjp2YXIgcD0zREMueCtB
Ll9ncmlkUGFkZGluZy5sZWZ0K3QudG9vbHRpcE9mZnNldCtqKnY7dmFyIG49M0RDLnkrQS5fZ3Jp
ZD0KUGFkZGluZy50b3AtdC50b29sdGlwT2Zmc2V0LUQub3V0ZXJIZWlnaHQodHJ1ZSktaip2O2Jy
ZWFrO2Nhc2UiZSI6dmFyIHA9M0RDPQoueCtBLl9ncmlkUGFkZGluZy5sZWZ0K3QudG9vbHRpcE9m
ZnNldCt2O3ZhciBuPTNEQy55K0EuX2dyaWRQYWRkaW5nLnRvcC1ELm89CnV0ZXJIZWlnaHQodHJ1
ZSkvMjticmVhaztjYXNlInNlIjp2YXIgcD0zREMueCtBLl9ncmlkUGFkZGluZy5sZWZ0K3QudG9v
bHRpcD0KT2Zmc2V0K2oqdjt2YXIgbj0zREMueStBLl9ncmlkUGFkZGluZy50b3ArdC50b29sdGlw
T2Zmc2V0K2oqdjticmVhaztjYXNlInMiPQo6dmFyIHA9M0RDLngrQS5fZ3JpZFBhZGRpbmcubGVm
dC1ELm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgbj0zREMueStBLl9ncmlkUGE9CmRkaW5nLnRvcCt0
LnRvb2x0aXBPZmZzZXQrdjticmVhaztjYXNlInN3Ijp2YXIgcD0zREMueCtBLl9ncmlkUGFkZGlu
Zy5sZWZ0LT0KRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcE9mZnNldC1qKnY7dmFyIG49M0RD
LnkrQS5fZ3JpZFBhZGRpbmcudG9wK3QudG9vPQpsdGlwT2Zmc2V0K2oqdjticmVhaztjYXNlInci
OnZhciBwPTNEQy54K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHQ9CnJ1ZSktdC50
b29sdGlwT2Zmc2V0LXY7dmFyIG49M0RDLnkrQS5fZ3JpZFBhZGRpbmcudG9wLUQub3V0ZXJIZWln
aHQodHJ1ZSkvMj0KO2JyZWFrO2RlZmF1bHQ6dmFyIHA9M0RDLngrQS5fZ3JpZFBhZGRpbmcubGVm
dC1ELm91dGVyV2lkdGgodHJ1ZSktdC50b29sdGlwPQpPZmZzZXQtaip2O3ZhciBuPTNEQy55K0Eu
X2dyaWRQYWRkaW5nLnRvcC10LnRvb2x0aXBPZmZzZXQtRC5vdXRlckhlaWdodCh0cnU9CmUpLWoq
djticmVha31ELmNzcygibGVmdCIscCk7RC5jc3MoInRvcCIsbik7aWYodC5mYWRlVG9vbHRpcCl7
RC5zdG9wKHRydWUsdD0KcnVlKS5mYWRlSW4odC50b29sdGlwRmFkZVNwZWVkKX1lbHNle0Quc2hv
dygpfUQ9M0RudWxsfWZ1bmN0aW9uIGYobixqLGkscCxsPQope3ZhciBoPTNEbC5wbHVnaW5zLmhp
Z2hsaWdodGVyO3ZhciBtPTNEbC5wbHVnaW5zLmN1cnNvcjtpZihoLnNob3cpe2lmKHA9M0Q9Cj0z
RG51bGwmJmguaXNIaWdobGlnaHRpbmcpe3ZhciBvPTNEalF1ZXJ5LkV2ZW50KCJqcXBsb3RIaWdo
bGlnaHRlclVuaGlnaGxpZz0KaHQiKTtsLnRhcmdldC50cmlnZ2VyKG8pO3ZhciBxPTNEaC5oaWdo
bGlnaHRDYW52YXMuX2N0eDtxLmNsZWFyUmVjdCgwLDAscS5jPQphbnZhcy53aWR0aCxxLmNhbnZh
cy5oZWlnaHQpO2lmKGguZmFkZVRvb2x0aXApe2guX3Rvb2x0aXBFbGVtLmZhZGVPdXQoaC50b289
Cmx0aXBGYWRlU3BlZWQpfWVsc2V7aC5fdG9vbHRpcEVsZW0uaGlkZSgpfWlmKGguYnJpbmdTZXJp
ZXNUb0Zyb250KXtsLnJlc3Rvcj0KZVByZXZpb3VzU2VyaWVzT3JkZXIoKX1oLmlzSGlnaGxpZ2h0
aW5nPTNEZmFsc2U7aC5jdXJyZW50TmVpZ2hib3I9M0RudWxsO3E9Cj0zRG51bGx9ZWxzZXtpZihw
IT0zRG51bGwmJmwuc2VyaWVzW3Auc2VyaWVzSW5kZXhdLnNob3dIaWdobGlnaHQmJiFoLmlzSGln
aD0KbGlnaHRpbmcpe3ZhciBvPTNEalF1ZXJ5LkV2ZW50KCJqcXBsb3RIaWdobGlnaHRlckhpZ2hs
aWdodCIpO28ud2hpY2g9M0RuLndoPQppY2g7by5wYWdlWD0zRG4ucGFnZVg7by5wYWdlWT0zRG4u
cGFnZVk7dmFyIGs9M0RbcC5zZXJpZXNJbmRleCxwLnBvaW50SW5kZXg9CixwLmRhdGEsbF07bC50
YXJnZXQudHJpZ2dlcihvLGspO2guaXNIaWdobGlnaHRpbmc9M0R0cnVlO2guY3VycmVudE5laWdo
Ym9yPQo9M0RwO2lmKGguc2hvd01hcmtlcil7YShsLHApfWlmKGwuc2VyaWVzW3Auc2VyaWVzSW5k
ZXhdLnNob3cmJmguc2hvd1Rvb2x0aXA9CiYmKCFtfHwhbS5fem9vbS5zdGFydGVkKSl7ZyhsLGwu
c2VyaWVzW3Auc2VyaWVzSW5kZXhdLHApfWlmKGguYnJpbmdTZXJpZXNUbz0KRnJvbnQpe2wubW92
ZVNlcmllc1RvRnJvbnQocC5zZXJpZXNJbmRleCl9fWVsc2V7aWYocCE9M0RudWxsJiZoLmlzSGln
aGxpZ2h0PQppbmcmJmguY3VycmVudE5laWdoYm9yIT0zRHApe2lmKGwuc2VyaWVzW3Auc2VyaWVz
SW5kZXhdLnNob3dIaWdobGlnaHQpe3ZhciA9CnE9M0RoLmhpZ2hsaWdodENhbnZhcy5fY3R4O3Eu
Y2xlYXJSZWN0KDAsMCxxLmNhbnZhcy53aWR0aCxxLmNhbnZhcy5oZWlnaHQpOz0KaC5pc0hpZ2hs
aWdodGluZz0zRHRydWU7aC5jdXJyZW50TmVpZ2hib3I9M0RwO2lmKGguc2hvd01hcmtlcil7YShs
LHApfWlmKGwuPQpzZXJpZXNbcC5zZXJpZXNJbmRleF0uc2hvdyYmaC5zaG93VG9vbHRpcCYmKCFt
fHwhbS5fem9vbS5zdGFydGVkKSl7ZyhsLGwuc2U9CnJpZXNbcC5zZXJpZXNJbmRleF0scCl9aWYo
aC5icmluZ1Nlcmllc1RvRnJvbnQpe2wubW92ZVNlcmllc1RvRnJvbnQocC5zZXJpZT0Kc0luZGV4
KX19fX19fX19KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIg
ZGI5MmY2ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVl
MzJkZDVmMmZhYz0KOTNkODBmYmU5MzViYThjMjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvY2hhcnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvPQp0L3BsdWdpbnMvanFwbG90LmJhclJlbmRl
cmVyLm1pbi5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsb3QvcGx1Z2lucy9qcT0KcGxvdC5iYXJSZW5k
ZXJlci5taW4uanMKQEAgLTAsMCArMSwzIEBACisvKiBqcVBsb3QgMS4wLjhyMTI1MCB8IChjKSAy
MDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8gfCBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8IChjKSAyMDEw
LTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihkKXtkLmpxcGxvdC5CYXJSZW5kZXJl
cj0zRGZ1bmN0aW9uKCl7ZC5qcXBsb3QuTGluZVJlbmRlcmVyLmNhPQpsbCh0aGlzKX07ZC5qcXBs
b3QuQmFyUmVuZGVyZXIucHJvdG90eXBlPTNEbmV3IGQuanFwbG90LkxpbmVSZW5kZXJlcigpO2Qu
anE9CnBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPTNEZC5qcXBsb3QuQmFy
UmVuZGVyZXI7ZC5qcXBsb3QuQmFyUj0KZW5kZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9u
KG8scSl7dGhpcy5iYXJQYWRkaW5nPTNEODt0aGlzLmJhck1hcmdpbj0KPTNEMTA7dGhpcy5iYXJE
aXJlY3Rpb249M0QidmVydGljYWwiO3RoaXMuYmFyV2lkdGg9M0RudWxsO3RoaXMuc2hhZG93T2Zm
c2V0PQo9M0QyO3RoaXMuc2hhZG93RGVwdGg9M0Q1O3RoaXMuc2hhZG93QWxwaGE9M0QwLjA4O3Ro
aXMud2F0ZXJmYWxsPTNEZmFsc2U7dGg9CmlzLmdyb3Vwcz0zRDE7dGhpcy52YXJ5QmFyQ29sb3I9
M0RmYWxzZTt0aGlzLmhpZ2hsaWdodE1vdXNlT3Zlcj0zRHRydWU7dGhpcz0KLmhpZ2hsaWdodE1v
dXNlRG93bj0zRGZhbHNlO3RoaXMuaGlnaGxpZ2h0Q29sb3JzPTNEW107dGhpcy50cmFuc3Bvc2Vk
RGF0YT0KPTNEdHJ1ZTt0aGlzLnJlbmRlcmVyLmFuaW1hdGlvbj0zRHtzaG93OmZhbHNlLGRpcmVj
dGlvbjoiZG93biIsc3BlZWQ6MzAwMCxfPQpzdXBwb3J0ZWQ6dHJ1ZX07dGhpcy5fdHlwZT0zRCJi
YXIiO2lmKG8uaGlnaGxpZ2h0TW91c2VEb3duJiZvLmhpZ2hsaWdodE1vdXM9CmVPdmVyPTNEPTNE
bnVsbCl7by5oaWdobGlnaHRNb3VzZU92ZXI9M0RmYWxzZX1kLmV4dGVuZCh0cnVlLHRoaXMsbyk7
ZC5leHRlbj0KZCh0cnVlLHRoaXMucmVuZGVyZXIsbyk7dGhpcy5maWxsPTNEdHJ1ZTtpZih0aGlz
LmJhckRpcmVjdGlvbj0zRD0zRD0zRCJob3JpPQp6b250YWwiJiZ0aGlzLnJlbmRlcmVyT3B0aW9u
cy5hbmltYXRpb24mJnRoaXMucmVuZGVyZXJPcHRpb25zLmFuaW1hdGlvbi5kaXI9CmVjdGlvbj0z
RD0zRG51bGwpe3RoaXMucmVuZGVyZXIuYW5pbWF0aW9uLmRpcmVjdGlvbj0zRCJsZWZ0In1pZih0
aGlzLndhdGVyZj0KYWxsKXt0aGlzLmZpbGxUb1plcm89M0RmYWxzZTt0aGlzLmRpc2FibGVTdGFj
az0zRHRydWV9aWYodGhpcy5iYXJEaXJlY3Rpb249Cj0zRD0zRCJ2ZXJ0aWNhbCIpe3RoaXMuX3By
aW1hcnlBeGlzPTNEIl94YXhpcyI7dGhpcy5fc3RhY2tBeGlzPTNEInkiO3RoaXMuZj0KaWxsQXhp
cz0zRCJ5In1lbHNle3RoaXMuX3ByaW1hcnlBeGlzPTNEIl95YXhpcyI7dGhpcy5fc3RhY2tBeGlz
PTNEIngiO3RoaXMuPQpmaWxsQXhpcz0zRCJ4In10aGlzLl9oaWdobGlnaHRlZFBvaW50PTNEbnVs
bDt0aGlzLl9wbG90U2VyaWVzSW5mbz0zRG51bGw7dGg9CmlzLl9kYXRhQ29sb3JzPTNEW107dGhp
cy5fYmFyUG9pbnRzPTNEW107dmFyIHA9M0R7bGluZUpvaW46Im1pdGVyIixsaW5lQ2FwOj0KInJv
dW5kIixmaWxsOnRydWUsaXNhcmM6ZmFsc2Usc3Ryb2tlU3R5bGU6dGhpcy5jb2xvcixmaWxsU3R5
bGU6dGhpcy5jb2xvcixjPQpsb3NlUGF0aDp0aGlzLmZpbGx9O3RoaXMucmVuZGVyZXIuc2hhcGVS
ZW5kZXJlci5pbml0KHApO3ZhciBuPTNEe2xpbmVKb2luOiI9Cm1pdGVyIixsaW5lQ2FwOiJyb3Vu
ZCIsZmlsbDp0cnVlLGlzYXJjOmZhbHNlLGFuZ2xlOnRoaXMuc2hhZG93QW5nbGUsb2Zmc2V0Oj0K
dGhpcy5zaGFkb3dPZmZzZXQsYWxwaGE6dGhpcy5zaGFkb3dBbHBoYSxkZXB0aDp0aGlzLnNoYWRv
d0RlcHRoLGNsb3NlUGF0aDp0PQpoaXMuZmlsbH07dGhpcy5yZW5kZXJlci5zaGFkb3dSZW5kZXJl
ci5pbml0KG4pO3EucG9zdEluaXRIb29rcy5hZGRPbmNlKGgpO3E9Ci5wb3N0RHJhd0hvb2tzLmFk
ZE9uY2Uoaik7cS5ldmVudExpc3RlbmVySG9va3MuYWRkT25jZSgianFwbG90TW91c2VNb3ZlIixi
KT0KO3EuZXZlbnRMaXN0ZW5lckhvb2tzLmFkZE9uY2UoImpxcGxvdE1vdXNlRG93biIsYSk7cS5l
dmVudExpc3RlbmVySG9va3MuYWRkPQpPbmNlKCJqcXBsb3RNb3VzZVVwIixsKTtxLmV2ZW50TGlz
dGVuZXJIb29rcy5hZGRPbmNlKCJqcXBsb3RDbGljayIsZSk7cS5ldmU9Cm50TGlzdGVuZXJIb29r
cy5hZGRPbmNlKCJqcXBsb3RSaWdodENsaWNrIixtKX07ZnVuY3Rpb24gZyh0LHAsbyx3KXtpZih0
aGlzLj0KcmVuZGVyZXJPcHRpb25zLmJhckRpcmVjdGlvbj0zRD0zRCJob3Jpem9udGFsIil7dGhp
cy5fc3RhY2tBeGlzPTNEIngiO3RoaXMuPQpfcHJpbWFyeUF4aXM9M0QiX3lheGlzIn1pZih0aGlz
LnJlbmRlcmVyT3B0aW9ucy53YXRlcmZhbGw9M0Q9M0R0cnVlKXt0aGlzLl89CmRhdGE9M0RkLmV4
dGVuZCh0cnVlLFtdLHRoaXMuZGF0YSk7dmFyIHM9M0QwO3ZhciB1PTNEKCF0aGlzLnJlbmRlcmVy
T3B0aW9ucz0KLmJhckRpcmVjdGlvbnx8dGhpcy5yZW5kZXJlck9wdGlvbnMuYmFyRGlyZWN0aW9u
PTNEPTNEPTNEInZlcnRpY2FsInx8dGhpcy50PQpyYW5zcG9zZWREYXRhPTNEPTNEPTNEZmFsc2Up
PzE6MDtmb3IodmFyIHE9M0QwO3E8dGhpcy5kYXRhLmxlbmd0aDtxKyspe3MrPQo9M0R0aGlzLmRh
dGFbcV1bdV07aWYocT4wKXt0aGlzLmRhdGFbcV1bdV0rPTNEdGhpcy5kYXRhW3EtMV1bdV19fXRo
aXMuZGF0YVs9CnRoaXMuZGF0YS5sZW5ndGhdPTNEKHU9M0Q9M0QxKT9bdGhpcy5kYXRhLmxlbmd0
aCsxLHNdOltzLHRoaXMuZGF0YS5sZW5ndGgrMT0KXTt0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVu
Z3RoXT0zRCh1PTNEPTNEMSk/W3RoaXMuX2RhdGEubGVuZ3RoKzEsc106W3MsdGhpPQpzLl9kYXRh
Lmxlbmd0aCsxXX1pZih0aGlzLnJlbmRlcmVyT3B0aW9ucy5ncm91cHM+MSl7dGhpcy5icmVha09u
TnVsbD0zRHRydWU9Cjt2YXIgbj0zRHRoaXMuZGF0YS5sZW5ndGg7dmFyIHY9M0RwYXJzZUludChu
L3RoaXMucmVuZGVyZXJPcHRpb25zLmdyb3VwcywxMD0KKTt2YXIgcj0zRDA7Zm9yKHZhciBxPTNE
djtxPG47cSs9M0R2KXt0aGlzLmRhdGEuc3BsaWNlKHErciwwLFtudWxsLG51bGxdKTt0PQpoaXMu
X3Bsb3REYXRhLnNwbGljZShxK3IsMCxbbnVsbCxudWxsXSk7dGhpcy5fc3RhY2tEYXRhLnNwbGlj
ZShxK3IsMCxbbnVsbCw9Cm51bGxdKTtyKyt9Zm9yKHE9M0QwO3E8dGhpcy5kYXRhLmxlbmd0aDtx
Kyspe2lmKHRoaXMuX3ByaW1hcnlBeGlzPTNEPTNEIl94YT0KeGlzIil7dGhpcy5kYXRhW3FdWzBd
PTNEcSsxO3RoaXMuX3Bsb3REYXRhW3FdWzBdPTNEcSsxO3RoaXMuX3N0YWNrRGF0YVtxXVswPQpd
PTNEcSsxfWVsc2V7dGhpcy5kYXRhW3FdWzFdPTNEcSsxO3RoaXMuX3Bsb3REYXRhW3FdWzFdPTNE
cSsxO3RoaXMuX3N0YWNrRGE9CnRhW3FdWzFdPTNEcSsxfX19fWQuanFwbG90LnByZVNlcmllc0lu
aXRIb29rcy5wdXNoKGcpO2QuanFwbG90LkJhclJlbmRlcmVyLj0KcHJvdG90eXBlLmNhbGNTZXJp
ZXNOdW1iZXJzPTNEZnVuY3Rpb24oKXt2YXIgcj0zRDA7dmFyIHQ9M0QwO3ZhciBxPTNEdGhpc1t0
PQpoaXMuX3ByaW1hcnlBeGlzXTt2YXIgcCxvLHU7Zm9yKHZhciBuPTNEMDtuPHEuX3Nlcmllcy5s
ZW5ndGg7bisrKXtvPTNEcS5fc2U9CnJpZXNbbl07aWYobz0zRD0zRD0zRHRoaXMpe3U9M0RufWlm
KG8ucmVuZGVyZXIuY29uc3RydWN0b3I9M0Q9M0RkLmpxcGxvdC5CYT0KclJlbmRlcmVyKXtyKz0z
RG8uZGF0YS5sZW5ndGg7dCs9M0QxfX1yZXR1cm5bcix0LHVdfTtkLmpxcGxvdC5CYXJSZW5kZXJl
ci5wPQpyb3RvdHlwZS5zZXRCYXJXaWR0aD0zRGZ1bmN0aW9uKCl7dmFyIHE7dmFyIG49M0QwO3Zh
ciBvPTNEMDt2YXIgdD0zRHRoaXNbdGg9CmlzLl9wcmltYXJ5QXhpc107dmFyIHgscix2O3ZhciB3
PTNEdGhpcy5fcGxvdFNlcmllc0luZm89M0R0aGlzLnJlbmRlcmVyLmNhbD0KY1Nlcmllc051bWJl
cnMuY2FsbCh0aGlzKTtuPTNEd1swXTtvPTNEd1sxXTt2YXIgdT0zRHQubnVtYmVyVGlja3M7dmFy
IHA9M0QoPQp1LTEpLzI7aWYodC5uYW1lPTNEPTNEInhheGlzInx8dC5uYW1lPTNEPTNEIngyYXhp
cyIpe2lmKHRoaXMuX3N0YWNrKXt0aGlzLmI9CmFyV2lkdGg9M0QodC5fb2Zmc2V0cy5tYXgtdC5f
b2Zmc2V0cy5taW4pL24qby10aGlzLmJhck1hcmdpbn1lbHNle3RoaXMuYmFyVz0KaWR0aD0zRCgo
dC5fb2Zmc2V0cy5tYXgtdC5fb2Zmc2V0cy5taW4pL3AtdGhpcy5iYXJQYWRkaW5nKihvLTEpLXRo
aXMuYmFyTWFyPQpnaW4qMikvb319ZWxzZXtpZih0aGlzLl9zdGFjayl7dGhpcy5iYXJXaWR0aD0z
RCh0Ll9vZmZzZXRzLm1pbi10Ll9vZmZzZXRzLm09CmF4KS9uKm8tdGhpcy5iYXJNYXJnaW59ZWxz
ZXt0aGlzLmJhcldpZHRoPTNEKCh0Ll9vZmZzZXRzLm1pbi10Ll9vZmZzZXRzLm1heD0KKS9wLXRo
aXMuYmFyUGFkZGluZyooby0xKS10aGlzLmJhck1hcmdpbioyKS9vfX1yZXR1cm5bbixvXX07ZnVu
Y3Rpb24gZihvKXt2PQphciBxPTNEW107Zm9yKHZhciBzPTNEMDtzPG8ubGVuZ3RoO3MrKyl7dmFy
IHI9M0RkLmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHM9CihvW3NdKTt2YXIgbj0zRFtyWzBdLHJb
MV0sclsyXV07dmFyIHQ9M0RuWzBdK25bMV0rblsyXTtmb3IodmFyIHA9M0QwO3A8MztwKz0KKyl7
bltwXT0zRCh0PjU3MCk/bltwXSowLjg6bltwXSswLjMqKDI1NS1uW3BdKTtuW3BdPTNEcGFyc2VJ
bnQobltwXSwxMCl9cS5wPQp1c2goInJnYigiK25bMF0rIiwiK25bMV0rIiwiK25bMl0rIikiKX1y
ZXR1cm4gcX1mdW5jdGlvbiBpKHYsdSxzLHQsbyl7dmFyIHE9Cj0zRHYsdz0zRHYtMSxuLHAscj0z
RChvPTNEPTNEPTNEIngiKT8wOjE7aWYocT4wKXtwPTNEdC5zZXJpZXNbd10uX3Bsb3REYXRhWz0K
dV1bcl07aWYoKHMqcCk8MCl7bj0zRGkodyx1LHMsdCxvKX1lbHNle249M0R0LnNlcmllc1t3XS5n
cmlkRGF0YVt1XVtyXX19ZWxzPQple249M0Qocj0zRD0zRD0zRDApP3Quc2VyaWVzW3FdLl94YXhp
cy5zZXJpZXNfdTJwKDApOnQuc2VyaWVzW3FdLl95YXhpcy5zZXI9Cmllc191MnAoMCl9cmV0dXJu
IG59ZC5qcXBsb3QuQmFyUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9M0RmdW5jdGlvbihFLEwscSxH
KT0Ke3ZhciBJO3ZhciBBPTNEZC5leHRlbmQoe30scSk7dmFyIHc9M0QoQS5zaGFkb3chPTNEdW5k
ZWZpbmVkKT9BLnNoYWRvdzp0aGlzPQouc2hhZG93O3ZhciBPPTNEKEEuc2hvd0xpbmUhPTNEdW5k
ZWZpbmVkKT9BLnNob3dMaW5lOnRoaXMuc2hvd0xpbmU7dmFyIEY9M0Q9CihBLmZpbGwhPTNEdW5k
ZWZpbmVkKT9BLmZpbGw6dGhpcy5maWxsO3ZhciBwPTNEdGhpcy54YXhpczt2YXIgSj0zRHRoaXMu
eWF4aT0Kczt2YXIgeT0zRHRoaXMuX3hheGlzLnNlcmllc191MnA7dmFyIEs9M0R0aGlzLl95YXhp
cy5zZXJpZXNfdTJwO3ZhciBELEM7dGhpPQpzLl9kYXRhQ29sb3JzPTNEW107dGhpcy5fYmFyUG9p
bnRzPTNEW107aWYodGhpcy5iYXJXaWR0aD0zRD0zRG51bGwpe3RoaXMucmU9Cm5kZXJlci5zZXRC
YXJXaWR0aC5jYWxsKHRoaXMpfXZhciBOPTNEdGhpcy5fcGxvdFNlcmllc0luZm89M0R0aGlzLnJl
bmRlcmVyLj0KY2FsY1Nlcmllc051bWJlcnMuY2FsbCh0aGlzKTt2YXIgeD0zRE5bMF07dmFyIHY9
M0ROWzFdO3ZhciBzPTNETlsyXTt2YXIgSD0KPTNEW107aWYodGhpcy5fc3RhY2spe3RoaXMuX2Jh
ck51ZGdlPTNEMH1lbHNle3RoaXMuX2Jhck51ZGdlPTNEKC1NYXRoLmFicyh2PQovMi0wLjUpK3Mp
Kih0aGlzLmJhcldpZHRoK3RoaXMuYmFyUGFkZGluZyl9aWYoTyl7dmFyIHU9M0RuZXcgZC5qcXBs
b3QuQ29sb3I9CkdlbmVyYXRvcih0aGlzLm5lZ2F0aXZlU2VyaWVzQ29sb3JzKTt2YXIgQj0zRG5l
dyBkLmpxcGxvdC5Db2xvckdlbmVyYXRvcih0aD0KaXMuc2VyaWVzQ29sb3JzKTt2YXIgTT0zRHUu
Z2V0KHRoaXMuaW5kZXgpO2lmKCF0aGlzLnVzZU5lZ2F0aXZlQ29sb3JzKXtNPTNEPQpBLmZpbGxT
dHlsZX12YXIgdD0zREEuZmlsbFN0eWxlO3ZhciByO3ZhciBQO3ZhciBvO2lmKHRoaXMuYmFyRGly
ZWN0aW9uPTNEPQo9M0QidmVydGljYWwiKXtmb3IodmFyIEk9M0QwO0k8TC5sZW5ndGg7SSsrKXtp
ZighdGhpcy5fc3RhY2smJnRoaXMuZGF0YVtJXVs9CjFdPTNEPTNEbnVsbCl7Y29udGludWV9SD0z
RFtdO3I9M0RMW0ldWzBdK3RoaXMuX2Jhck51ZGdlO2lmKHRoaXMuX3N0YWNrJiZ0aD0KaXMuX3By
ZXZHcmlkRGF0YS5sZW5ndGgpe289M0RpKHRoaXMuaW5kZXgsSSx0aGlzLl9wbG90RGF0YVtJXVsx
XSxHLCJ5Iil9ZWxzPQple2lmKHRoaXMuZmlsbFRvWmVybyl7bz0zRHRoaXMuX3lheGlzLnNlcmll
c191MnAoMCl9ZWxzZXtpZih0aGlzLndhdGVyZmFsbCY9CiZJPjAmJkk8dGhpcy5ncmlkRGF0YS5s
ZW5ndGgtMSl7bz0zRHRoaXMuZ3JpZERhdGFbSS0xXVsxXX1lbHNle2lmKHRoaXMud2F0ZT0KcmZh
bGwmJkk9M0Q9M0QwJiZJPHRoaXMuZ3JpZERhdGEubGVuZ3RoLTEpe2lmKHRoaXMuX3lheGlzLm1p
bjw9M0QwJiZ0aGlzLl95PQpheGlzLm1heD49M0QwKXtvPTNEdGhpcy5feWF4aXMuc2VyaWVzX3Uy
cCgwKX1lbHNle2lmKHRoaXMuX3lheGlzLm1pbj4wKXtvPQo9M0RFLmNhbnZhcy5oZWlnaHR9ZWxz
ZXtvPTNEMH19fWVsc2V7aWYodGhpcy53YXRlcmZhbGwmJkk9M0Q9M0R0aGlzLmdyaWREYXQ9CmEu
bGVuZ3RoLTEpe2lmKHRoaXMuX3lheGlzLm1pbjw9M0QwJiZ0aGlzLl95YXhpcy5tYXg+PTNEMCl7
bz0zRHRoaXMuX3lheGlzLj0Kc2VyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3lheGlzLm1pbj4w
KXtvPTNERS5jYW52YXMuaGVpZ2h0fWVsc2V7bz0zRDB9fX1lPQpsc2V7bz0zREUuY2FudmFzLmhl
aWdodH19fX19aWYoKHRoaXMuZmlsbFRvWmVybyYmdGhpcy5fcGxvdERhdGFbSV1bMV08MCl8fCg9
CnRoaXMud2F0ZXJmYWxsJiZ0aGlzLl9kYXRhW0ldWzFdPDApKXtpZih0aGlzLnZhcnlCYXJDb2xv
ciYmIXRoaXMuX3N0YWNrKXtpZj0KKHRoaXMudXNlTmVnYXRpdmVDb2xvcnMpe0EuZmlsbFN0eWxl
PTNEdS5uZXh0KCl9ZWxzZXtBLmZpbGxTdHlsZT0zREIubmV4dCgpPQp9fWVsc2V7QS5maWxsU3R5
bGU9M0RNfX1lbHNle2lmKHRoaXMudmFyeUJhckNvbG9yJiYhdGhpcy5fc3RhY2spe0EuZmlsbFN0
eWw9CmU9M0RCLm5leHQoKX1lbHNle0EuZmlsbFN0eWxlPTNEdH19aWYoIXRoaXMuZmlsbFRvWmVy
b3x8dGhpcy5fcGxvdERhdGFbSV1bMT0KXT49M0QwKXtILnB1c2goW3ItdGhpcy5iYXJXaWR0aC8y
LG9dKTtILnB1c2goW3ItdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKTtIPQoucHVzaChbcit0aGlz
LmJhcldpZHRoLzIsTFtJXVsxXV0pO0gucHVzaChbcit0aGlzLmJhcldpZHRoLzIsb10pfWVsc2V7
SC5wdXM9CmgoW3ItdGhpcy5iYXJXaWR0aC8yLExbSV1bMV1dKTtILnB1c2goW3ItdGhpcy5iYXJX
aWR0aC8yLG9dKTtILnB1c2goW3IrdGhpcz0KLmJhcldpZHRoLzIsb10pO0gucHVzaChbcit0aGlz
LmJhcldpZHRoLzIsTFtJXVsxXV0pfXRoaXMuX2JhclBvaW50cy5wdXNoKEgpPQo7aWYodyYmIXRo
aXMuX3N0YWNrKXt2YXIgej0zRGQuZXh0ZW5kKHRydWUse30sQSk7ZGVsZXRlIHouZmlsbFN0eWxl
O3RoaXMucmU9Cm5kZXJlci5zaGFkb3dSZW5kZXJlci5kcmF3KEUsSCx6KX12YXIgbj0zREEuZmls
bFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMuX2RhdD0KYUNvbG9ycy5wdXNoKG4pO3RoaXMucmVuZGVy
ZXIuc2hhcGVSZW5kZXJlci5kcmF3KEUsSCxBKX19ZWxzZXtpZih0aGlzLmJhckRpPQpyZWN0aW9u
PTNEPTNEImhvcml6b250YWwiKXtmb3IodmFyIEk9M0QwO0k8TC5sZW5ndGg7SSsrKXtpZighdGhp
cy5fc3RhY2smJnQ9Cmhpcy5kYXRhW0ldWzBdPTNEPTNEbnVsbCl7Y29udGludWV9SD0zRFtdO3I9
M0RMW0ldWzFdLXRoaXMuX2Jhck51ZGdlO1A7aWYodD0KaGlzLl9zdGFjayYmdGhpcy5fcHJldkdy
aWREYXRhLmxlbmd0aCl7UD0zRGkodGhpcy5pbmRleCxJLHRoaXMuX3Bsb3REYXRhW0ldPQpbMF0s
RywieCIpfWVsc2V7aWYodGhpcy5maWxsVG9aZXJvKXtQPTNEdGhpcy5feGF4aXMuc2VyaWVzX3Uy
cCgwKX1lbHNle2lmKHQ9Cmhpcy53YXRlcmZhbGwmJkk+MCYmSTx0aGlzLmdyaWREYXRhLmxlbmd0
aC0xKXtQPTNEdGhpcy5ncmlkRGF0YVtJLTFdWzBdfWVscz0KZXtpZih0aGlzLndhdGVyZmFsbCYm
ST0zRD0zRDAmJkk8dGhpcy5ncmlkRGF0YS5sZW5ndGgtMSl7aWYodGhpcy5feGF4aXMubWluPQo8
PTNEMCYmdGhpcy5feGF4aXMubWF4Pj0zRDApe1A9M0R0aGlzLl94YXhpcy5zZXJpZXNfdTJwKDAp
fWVsc2V7aWYodGhpcy5feGE9Cnhpcy5taW4+MCl7UD0zRDB9ZWxzZXtQPTNEMH19fWVsc2V7aWYo
dGhpcy53YXRlcmZhbGwmJkk9M0Q9M0R0aGlzLmdyaWREYXRhLj0KbGVuZ3RoLTEpe2lmKHRoaXMu
X3hheGlzLm1pbjw9M0QwJiZ0aGlzLl94YXhpcy5tYXg+PTNEMCl7UD0zRHRoaXMuX3hheGlzLnNl
PQpyaWVzX3UycCgwKX1lbHNle2lmKHRoaXMuX3hheGlzLm1pbj4wKXtQPTNEMH1lbHNle1A9M0RF
LmNhbnZhcy53aWR0aH19fWVsc2U9CntQPTNEMH19fX19aWYoKHRoaXMuZmlsbFRvWmVybyYmdGhp
cy5fcGxvdERhdGFbSV1bMF08MCl8fCh0aGlzLndhdGVyZmFsbCYmdD0KaGlzLl9kYXRhW0ldWzBd
PDApKXtpZih0aGlzLnZhcnlCYXJDb2xvciYmIXRoaXMuX3N0YWNrKXtpZih0aGlzLnVzZU5lZ2F0
aXZlPQpDb2xvcnMpe0EuZmlsbFN0eWxlPTNEdS5uZXh0KCl9ZWxzZXtBLmZpbGxTdHlsZT0zREIu
bmV4dCgpfX1lbHNle0EuZmlsbFN0eWw9CmU9M0RNfX1lbHNle2lmKHRoaXMudmFyeUJhckNvbG9y
JiYhdGhpcy5fc3RhY2spe0EuZmlsbFN0eWxlPTNEQi5uZXh0KCl9ZWxzZT0Ke0EuZmlsbFN0eWxl
PTNEdH19aWYoIXRoaXMuZmlsbFRvWmVyb3x8dGhpcy5fcGxvdERhdGFbSV1bMF0+PTNEMCl7SC5w
dXNoKFtQPQoscit0aGlzLmJhcldpZHRoLzJdKTtILnB1c2goW1Asci10aGlzLmJhcldpZHRoLzJd
KTtILnB1c2goW0xbSV1bMF0sci10aGlzLmI9CmFyV2lkdGgvMl0pO0gucHVzaChbTFtJXVswXSxy
K3RoaXMuYmFyV2lkdGgvMl0pfWVsc2V7SC5wdXNoKFtMW0ldWzBdLHIrdGhpcz0KLmJhcldpZHRo
LzJdKTtILnB1c2goW0xbSV1bMF0sci10aGlzLmJhcldpZHRoLzJdKTtILnB1c2goW1Asci10aGlz
LmJhcldpZHRoPQovMl0pO0gucHVzaChbUCxyK3RoaXMuYmFyV2lkdGgvMl0pfXRoaXMuX2JhclBv
aW50cy5wdXNoKEgpO2lmKHcmJiF0aGlzLl9zdGE9CmNrKXt2YXIgej0zRGQuZXh0ZW5kKHRydWUs
e30sQSk7ZGVsZXRlIHouZmlsbFN0eWxlO3RoaXMucmVuZGVyZXIuc2hhZG93UmVuZD0KZXJlci5k
cmF3KEUsSCx6KX12YXIgbj0zREEuZmlsbFN0eWxlfHx0aGlzLmNvbG9yO3RoaXMuX2RhdGFDb2xv
cnMucHVzaChuKTt0PQpoaXMucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KEUsSCxBKX19fX1p
Zih0aGlzLmhpZ2hsaWdodENvbG9ycy5sZW5ndGg9M0Q9Cj0zRDApe3RoaXMuaGlnaGxpZ2h0Q29s
b3JzPTNEZC5qcXBsb3QuY29tcHV0ZUhpZ2hsaWdodENvbG9ycyh0aGlzLl9kYXRhQ29sbz0KcnMp
fWVsc2V7aWYodHlwZW9mKHRoaXMuaGlnaGxpZ2h0Q29sb3JzKT0zRD0zRCJzdHJpbmciKXt2YXIg
Tj0zRHRoaXMuaGlnaGxpPQpnaHRDb2xvcnM7dGhpcy5oaWdobGlnaHRDb2xvcnM9M0RbXTtmb3Io
dmFyIEk9M0QwO0k8dGhpcy5fZGF0YUNvbG9ycy5sZW5ndGg9CjtJKyspe3RoaXMuaGlnaGxpZ2h0
Q29sb3JzLnB1c2goTil9fX19O2QuanFwbG90LkJhclJlbmRlcmVyLnByb3RvdHlwZS5kcmF3Uz0K
aGFkb3c9M0RmdW5jdGlvbih6LEcscCxCKXt2YXIgRDt2YXIgdz0zRChwIT0zRHVuZGVmaW5lZCk/
cDp7fTt2YXIgdD0zRCh3LnNoPQphZG93IT0zRHVuZGVmaW5lZCk/dy5zaGFkb3c6dGhpcy5zaGFk
b3c7dmFyIEk9M0Qody5zaG93TGluZSE9M0R1bmRlZmluZWQpP3c9Ci5zaG93TGluZTp0aGlzLnNo
b3dMaW5lO3ZhciBBPTNEKHcuZmlsbCE9M0R1bmRlZmluZWQpP3cuZmlsbDp0aGlzLmZpbGw7dmFy
ID0Kbz0zRHRoaXMueGF4aXM7dmFyIEU9M0R0aGlzLnlheGlzO3ZhciB2PTNEdGhpcy5feGF4aXMu
c2VyaWVzX3UycDt2YXIgRj0zRHRoPQppcy5feWF4aXMuc2VyaWVzX3UycDt2YXIgeSxDLHgsdSxz
LHI7aWYodGhpcy5fc3RhY2smJnRoaXMuc2hhZG93KXtpZih0aGlzLmI9CmFyV2lkdGg9M0Q9M0Ru
dWxsKXt0aGlzLnJlbmRlcmVyLnNldEJhcldpZHRoLmNhbGwodGhpcyl9dmFyIEg9M0R0aGlzLl9w
bG90Uz0KZXJpZXNJbmZvPTNEdGhpcy5yZW5kZXJlci5jYWxjU2VyaWVzTnVtYmVycy5jYWxsKHRo
aXMpO3U9M0RIWzBdO3M9M0RIWzFdO3I9Cj0zREhbMl07aWYodGhpcy5fc3RhY2spe3RoaXMuX2Jh
ck51ZGdlPTNEMH1lbHNle3RoaXMuX2Jhck51ZGdlPTNEKC1NYXRoLmFicz0KKHMvMi0wLjUpK3Ip
Kih0aGlzLmJhcldpZHRoK3RoaXMuYmFyUGFkZGluZyl9aWYoSSl7aWYodGhpcy5iYXJEaXJlY3Rp
b249M0Q9Cj0zRCJ2ZXJ0aWNhbCIpe2Zvcih2YXIgRD0zRDA7RDxHLmxlbmd0aDtEKyspe2lmKHRo
aXMuZGF0YVtEXVsxXT0zRD0zRG51bGwpez0KY29udGludWV9Qz0zRFtdO3ZhciBxPTNER1tEXVsw
XSt0aGlzLl9iYXJOdWRnZTt2YXIgbjtpZih0aGlzLl9zdGFjayYmdGhpcy5fPQpwcmV2R3JpZERh
dGEubGVuZ3RoKXtuPTNEaSh0aGlzLmluZGV4LEQsdGhpcy5fcGxvdERhdGFbRF1bMV0sQiwieSIp
fWVsc2V7aWY9Cih0aGlzLmZpbGxUb1plcm8pe249M0R0aGlzLl95YXhpcy5zZXJpZXNfdTJwKDAp
fWVsc2V7bj0zRHouY2FudmFzLmhlaWdodH19Qz0KLnB1c2goW3EtdGhpcy5iYXJXaWR0aC8yLG5d
KTtDLnB1c2goW3EtdGhpcy5iYXJXaWR0aC8yLEdbRF1bMV1dKTtDLnB1c2goW3ErPQp0aGlzLmJh
cldpZHRoLzIsR1tEXVsxXV0pO0MucHVzaChbcSt0aGlzLmJhcldpZHRoLzIsbl0pO3RoaXMucmVu
ZGVyZXIuc2hhZG89CndSZW5kZXJlci5kcmF3KHosQyx3KX19ZWxzZXtpZih0aGlzLmJhckRpcmVj
dGlvbj0zRD0zRCJob3Jpem9udGFsIil7Zm9yKHZhcj0KIEQ9M0QwO0Q8Ry5sZW5ndGg7RCsrKXtp
Zih0aGlzLmRhdGFbRF1bMF09M0Q9M0RudWxsKXtjb250aW51ZX1DPTNEW107dmFyIHE9Cj0zREdb
RF1bMV0tdGhpcy5fYmFyTnVkZ2U7dmFyIEo7aWYodGhpcy5fc3RhY2smJnRoaXMuX3ByZXZHcmlk
RGF0YS5sZW5ndGgpez0KSj0zRGkodGhpcy5pbmRleCxELHRoaXMuX3Bsb3REYXRhW0RdWzBdLEIs
IngiKX1lbHNle2lmKHRoaXMuZmlsbFRvWmVybyl7Sj0KPTNEdGhpcy5feGF4aXMuc2VyaWVzX3Uy
cCgwKX1lbHNle0o9M0QwfX1DLnB1c2goW0oscSt0aGlzLmJhcldpZHRoLzJdKTtDLnB1PQpzaChb
R1tEXVswXSxxK3RoaXMuYmFyV2lkdGgvMl0pO0MucHVzaChbR1tEXVswXSxxLXRoaXMuYmFyV2lk
dGgvMl0pO0MucHVzaCg9CltKLHEtdGhpcy5iYXJXaWR0aC8yXSk7dGhpcy5yZW5kZXJlci5zaGFk
b3dSZW5kZXJlci5kcmF3KHosQyx3KX19fX19fTtmdW5jdD0KaW9uIGgocSxwLG4pe2Zvcih2YXIg
bz0zRDA7bzx0aGlzLnNlcmllcy5sZW5ndGg7bysrKXtpZih0aGlzLnNlcmllc1tvXS5yZW5kPQpl
cmVyLmNvbnN0cnVjdG9yPTNEPTNEZC5qcXBsb3QuQmFyUmVuZGVyZXIpe2lmKHRoaXMuc2VyaWVz
W29dLmhpZ2hsaWdodE1vdXM9CmVPdmVyKXt0aGlzLnNlcmllc1tvXS5oaWdobGlnaHRNb3VzZURv
d249M0RmYWxzZX19fX1mdW5jdGlvbiBqKCl7aWYodGhpcy5wbD0KdWdpbnMuYmFyUmVuZGVyZXIm
JnRoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRDYW52YXMpe3RoaXMucGx1Z2lucy5i
PQphclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5yZXNldENhbnZhcygpO3RoaXMucGx1Z2lucy5i
YXJSZW5kZXJlci5oaWdobGlnaHQ9CkNhbnZhcz0zRG51bGx9dGhpcy5wbHVnaW5zLmJhclJlbmRl
cmVyPTNEe2hpZ2hsaWdodGVkU2VyaWVzSW5kZXg6bnVsbH07dGhpcz0KLnBsdWdpbnMuYmFyUmVu
ZGVyZXIuaGlnaGxpZ2h0Q2FudmFzPTNEbmV3IGQuanFwbG90LkdlbmVyaWNDYW52YXMoKTt0aGlz
LmV2PQplbnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdo
bGlnaHRDYW52YXMuY3JlYXRlRWxlbWU9Cm50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtYmFy
UmVuZGVyZXItaGlnaGxpZ2h0LWNhbnZhcyIsdGhpcy5fcGxvdERpbWVucz0KaW9ucyx0aGlzKSk7
dGhpcy5wbHVnaW5zLmJhclJlbmRlcmVyLmhpZ2hsaWdodENhbnZhcy5zZXRDb250ZXh0KCk7dGhp
cy5ldmVuPQp0Q2FudmFzLl9lbGVtLmJpbmQoIm1vdXNlbGVhdmUiLHtwbG90OnRoaXN9LGZ1bmN0
aW9uKG4pe2sobi5kYXRhLnBsb3QpfSl9ZnU9Cm5jdGlvbiBjKHUsdCxxLHApe3ZhciBvPTNEdS5z
ZXJpZXNbdF07dmFyIG49M0R1LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGlnaGxpZz0KaHRDYW52YXM7
bi5fY3R4LmNsZWFyUmVjdCgwLDAsbi5fY3R4LmNhbnZhcy53aWR0aCxuLl9jdHguY2FudmFzLmhl
aWdodCk7by5fPQpoaWdobGlnaHRlZFBvaW50PTNEcTt1LnBsdWdpbnMuYmFyUmVuZGVyZXIuaGln
aGxpZ2h0ZWRTZXJpZXNJbmRleD0zRHQ7dmFyIHI9Cj0zRHtmaWxsU3R5bGU6by5oaWdobGlnaHRD
b2xvcnNbcV19O28ucmVuZGVyZXIuc2hhcGVSZW5kZXJlci5kcmF3KG4uX2N0eCxwLD0Kcik7bj0z
RG51bGx9ZnVuY3Rpb24gayhwKXt2YXIgbj0zRHAucGx1Z2lucy5iYXJSZW5kZXJlci5oaWdobGln
aHRDYW52YXM7bi5fPQpjdHguY2xlYXJSZWN0KDAsMCxuLl9jdHguY2FudmFzLndpZHRoLG4uX2N0
eC5jYW52YXMuaGVpZ2h0KTtmb3IodmFyIG89M0QwO289CjxwLnNlcmllcy5sZW5ndGg7bysrKXtw
LnNlcmllc1tvXS5faGlnaGxpZ2h0ZWRQb2ludD0zRG51bGx9cC5wbHVnaW5zLmJhclJlbj0KZGVy
ZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleD0zRG51bGw7cC50YXJnZXQudHJpZ2dlcigianFwbG90
RGF0YVVuaGlnaGxpZ2h0PQoiKTtuPTNEbnVsbH1mdW5jdGlvbiBiKHIscSx1LHQscyl7aWYodCl7
dmFyIHA9M0RbdC5zZXJpZXNJbmRleCx0LnBvaW50SW5kZXg9Cix0LmRhdGFdO3ZhciBvPTNEalF1
ZXJ5LkV2ZW50KCJqcXBsb3REYXRhTW91c2VPdmVyIik7by5wYWdlWD0zRHIucGFnZVg7by5wYT0K
Z2VZPTNEci5wYWdlWTtzLnRhcmdldC50cmlnZ2VyKG8scCk7aWYocy5zZXJpZXNbcFswXV0uc2hv
dyYmcy5zZXJpZXNbcFswXV0uPQpoaWdobGlnaHRNb3VzZU92ZXImJiEocFswXT0zRD0zRHMucGx1
Z2lucy5iYXJSZW5kZXJlci5oaWdobGlnaHRlZFNlcmllc0luZGU9CngmJnBbMV09M0Q9M0RzLnNl
cmllc1twWzBdXS5faGlnaGxpZ2h0ZWRQb2ludCkpe3ZhciBuPTNEalF1ZXJ5LkV2ZW50KCJqcXBs
bz0KdERhdGFIaWdobGlnaHQiKTtuLndoaWNoPTNEci53aGljaDtuLnBhZ2VYPTNEci5wYWdlWDtu
LnBhZ2VZPTNEci5wYWdlWTtzLnRhPQpyZ2V0LnRyaWdnZXIobixwKTtjKHMsdC5zZXJpZXNJbmRl
eCx0LnBvaW50SW5kZXgsdC5wb2ludHMpfX1lbHNle2lmKHQ9M0Q9M0Q9Cm51bGwpe2socyl9fX1m
dW5jdGlvbiBhKHEscCx0LHMscil7aWYocyl7dmFyIG89M0Rbcy5zZXJpZXNJbmRleCxzLnBvaW50
SW5kZT0KeCxzLmRhdGFdO2lmKHIuc2VyaWVzW29bMF1dLmhpZ2hsaWdodE1vdXNlRG93biYmIShv
WzBdPTNEPTNEci5wbHVnaW5zLmJhclJlPQpuZGVyZXIuaGlnaGxpZ2h0ZWRTZXJpZXNJbmRleCYm
b1sxXT0zRD0zRHIuc2VyaWVzW29bMF1dLl9oaWdobGlnaHRlZFBvaW50KSk9Cnt2YXIgbj0zRGpR
dWVyeS5FdmVudCgianFwbG90RGF0YUhpZ2hsaWdodCIpO24ud2hpY2g9M0RxLndoaWNoO24ucGFn
ZVg9M0RxLj0KcGFnZVg7bi5wYWdlWT0zRHEucGFnZVk7ci50YXJnZXQudHJpZ2dlcihuLG8pO2Mo
cixzLnNlcmllc0luZGV4LHMucG9pbnRJbmRlPQp4LHMucG9pbnRzKX19ZWxzZXtpZihzPTNEPTNE
bnVsbCl7ayhyKX19fWZ1bmN0aW9uIGwocCxvLHMscixxKXt2YXIgbj0zRHEucGw9CnVnaW5zLmJh
clJlbmRlcmVyLmhpZ2hsaWdodGVkU2VyaWVzSW5kZXg7aWYobiE9M0RudWxsJiZxLnNlcmllc1tu
XS5oaWdobGlnaD0KdE1vdXNlRG93bil7ayhxKX19ZnVuY3Rpb24gZShxLHAsdCxzLHIpe2lmKHMp
e3ZhciBvPTNEW3Muc2VyaWVzSW5kZXgscy5wb2luPQp0SW5kZXgscy5kYXRhXTt2YXIgbj0zRGpR
dWVyeS5FdmVudCgianFwbG90RGF0YUNsaWNrIik7bi53aGljaD0zRHEud2hpY2g7bi49CnBhZ2VY
PTNEcS5wYWdlWDtuLnBhZ2VZPTNEcS5wYWdlWTtyLnRhcmdldC50cmlnZ2VyKG4sbyl9fWZ1bmN0
aW9uIG0ocixxLHUsdD0KLHMpe2lmKHQpe3ZhciBwPTNEW3Quc2VyaWVzSW5kZXgsdC5wb2ludElu
ZGV4LHQuZGF0YV07dmFyIG49M0RzLnBsdWdpbnMuYmFyPQpSZW5kZXJlci5oaWdobGlnaHRlZFNl
cmllc0luZGV4O2lmKG4hPTNEbnVsbCYmcy5zZXJpZXNbbl0uaGlnaGxpZ2h0TW91c2VEb3c9Cm4p
e2socyl9dmFyIG89M0RqUXVlcnkuRXZlbnQoImpxcGxvdERhdGFSaWdodENsaWNrIik7by53aGlj
aD0zRHIud2hpY2g7by5wYT0KZ2VYPTNEci5wYWdlWDtvLnBhZ2VZPTNEci5wYWdlWTtzLnRhcmdl
dC50cmlnZ2VyKG8scCl9fX0pKGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoK
ZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFh
OTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3BsdWdpbnMvanFwbG89CnQvcGx1Z2lucy9qcXBsb3Qu
YmxvY2tSZW5kZXJlci5taW4uanMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3BsdWdpbnMvanFwbG90L3BsdWdpbnMvanE9CnBs
b3QuYmxvY2tSZW5kZXJlci5taW4uanMKQEAgLTAsMCArMSwzIEBACisvKiBqcVBsb3QgMS4wLjhy
MTI1MCB8IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8gfCBqcGxvdC5jb20KKyAgIGpzRGF0
ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihhKXthLmpxcGxv
dC5CbG9ja1JlbmRlcmVyPTNEZnVuY3Rpb24oKXthLmpxcGxvdC5MaW5lUmVuZGVyZXIuPQpjYWxs
KHRoaXMpfTthLmpxcGxvdC5CbG9ja1JlbmRlcmVyLnByb3RvdHlwZT0zRG5ldyBhLmpxcGxvdC5M
aW5lUmVuZGVyZXIoKTs9CmEuanFwbG90LkJsb2NrUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVj
dG9yPTNEYS5qcXBsb3QuQmxvY2tSZW5kZXJlcjthLmpxcD0KbG90LkJsb2NrUmVuZGVyZXIucHJv
dG90eXBlLmluaXQ9M0RmdW5jdGlvbihiKXt0aGlzLmNzcz0zRHtwYWRkaW5nOiIycHgiLGJvPQpy
ZGVyOiIxcHggc29saWQgIzk5OSIsdGV4dEFsaWduOiJjZW50ZXIifTt0aGlzLmVzY2FwZUh0bWw9
M0RmYWxzZTt0aGlzLmluc2U9CnJ0QnJlYWtzPTNEdHJ1ZTt0aGlzLnZhcnlCbG9ja0NvbG9ycz0z
RGZhbHNlO2EuZXh0ZW5kKHRydWUsdGhpcyxiKTtpZih0aGlzLj0KY3NzLmJhY2tncm91bmRDb2xv
cil7dGhpcy5jb2xvcj0zRHRoaXMuY3NzLmJhY2tncm91bmRDb2xvcn1lbHNle2lmKHRoaXMuY3Nz
PQouYmFja2dyb3VuZCl7dGhpcy5jb2xvcj0zRHRoaXMuY3NzLmJhY2tncm91bmR9ZWxzZXtpZigh
dGhpcy52YXJ5QmxvY2tDb2xvcnM9Cil7dGhpcy5jc3MuYmFja2dyb3VuZD0zRHRoaXMuY29sb3J9
fX10aGlzLmNhbnZhcz0zRG5ldyBhLmpxcGxvdC5CbG9ja0NhbnZhcz0KKCk7dGhpcy5zaGFkb3dD
YW52YXM9M0RuZXcgYS5qcXBsb3QuQmxvY2tDYW52YXMoKTt0aGlzLmNhbnZhcy5fcGxvdERpbWVu
c2lvPQpucz0zRHRoaXMuX3Bsb3REaW1lbnNpb25zO3RoaXMuc2hhZG93Q2FudmFzLl9wbG90RGlt
ZW5zaW9ucz0zRHRoaXMuX3Bsb3REaW09CmVuc2lvbnM7dGhpcy5fdHlwZT0zRCJibG9jayI7dGhp
cy5tb3ZlQmxvY2s9M0RmdW5jdGlvbihsLGosaSxlKXt2YXIgYz0zRHRoaT0Kcy5jYW52YXMuX2Vs
ZW0uY2hpbGRyZW4oIjplcSgiK2wrIikiKTt0aGlzLmRhdGFbbF1bMF09M0RqO3RoaXMuZGF0YVts
XVsxXT0KPTNEaTt0aGlzLl9wbG90RGF0YVtsXVswXT0zRGo7dGhpcy5fcGxvdERhdGFbbF1bMV09
M0RpO3RoaXMuX3N0YWNrRGF0YVtsXVswPQpdPTNEajt0aGlzLl9zdGFja0RhdGFbbF1bMV09M0Rp
O3RoaXMuZ3JpZERhdGFbbF1bMF09M0R0aGlzLl94YXhpcy5zZXJpZXNfdTI9CnAoaik7dGhpcy5n
cmlkRGF0YVtsXVsxXT0zRHRoaXMuX3lheGlzLnNlcmllc191MnAoaSk7dmFyIGs9M0RjLm91dGVy
V2lkdGgoKT0KO3ZhciBmPTNEYy5vdXRlckhlaWdodCgpO3ZhciBkPTNEdGhpcy5ncmlkRGF0YVts
XVswXS1rLzIrInB4Ijt2YXIgZz0zRHRoaXMuPQpncmlkRGF0YVtsXVsxXS1mLzIrInB4IjtpZihl
KXtpZihwYXJzZUludChlLDEwKSl7ZT0zRHBhcnNlSW50KGUsMTApfWMuYW5pbWE9CnRlKHtsZWZ0
OmQsdG9wOmd9LGUpfWVsc2V7Yy5jc3Moe2xlZnQ6ZCx0b3A6Z30pfWM9M0RudWxsfX07YS5qcXBs
b3QuQmxvY2tSZT0KbmRlcmVyLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24ocSxvLHIpe2lmKHRo
aXMucGx1Z2lucy5wb2ludExhYmVscyl7dGhpcy5wPQpsdWdpbnMucG9pbnRMYWJlbHMuc2hvdz0z
RGZhbHNlfXZhciBmLGMsbCxvLHAsayxuLGcsZSxtO3ZhciBiPTNEKHIhPTNEdW5kZWY9CmluZWQp
P3I6e307dmFyIGo9M0RuZXcgYS5qcXBsb3QuQ29sb3JHZW5lcmF0b3IodGhpcy5zZXJpZXNDb2xv
cnMpO3RoaXMuY2Fudj0KYXMuX2VsZW0uZW1wdHkoKTtmb3IoZj0zRDA7Zjx0aGlzLmdyaWREYXRh
Lmxlbmd0aDtmKyspe2w9M0R0aGlzLmRhdGFbZl07bz0KPTNEdGhpcy5ncmlkRGF0YVtmXTtwPTNE
IiI7az0zRHt9O2lmKHR5cGVvZiBsWzJdPTNEPTNEInN0cmluZyIpe3A9M0RsWzJdfWVsPQpzZXtp
Zih0eXBlb2YgbFsyXT0zRD0zRCJvYmplY3QiKXtrPTNEbFsyXX19aWYodHlwZW9mIGxbM109M0Q9
M0Qib2JqZWN0Iil7az0KPTNEbFszXX1pZih0aGlzLmluc2VydEJyZWFrcyl7cD0zRHAucmVwbGFj
ZSgvIC9nLCI8YnIgLz4iKX1rPTNEYS5leHRlbmQodHJ1PQplLHt9LHRoaXMuY3NzLGspO2M9M0Rh
KCc8ZGl2IHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OmF1dG87bWE9CnJn
aW4tcmlnaHQ6YXV0bzsiPjwvZGl2PicpO3RoaXMuY2FudmFzLl9lbGVtLmFwcGVuZChjKTt0aGlz
LmVzY2FwZUh0bWw/Yy50ZT0KeHQocCk6Yy5odG1sKHApO2RlbGV0ZSBrLnBvc2l0aW9uO2RlbGV0
ZSBrLm1hcmdpblJpZ2h0O2RlbGV0ZSBrLm1hcmdpbkxlZnQ7PQppZighay5iYWNrZ3JvdW5kJiYh
ay5iYWNrZ3JvdW5kQ29sb3ImJiFrLmJhY2tncm91bmRJbWFnZSl7ay5iYWNrZ3JvdW5kPTNEai49
Cm5leHQoKX1jLmNzcyhrKTtuPTNEYy5vdXRlcldpZHRoKCk7Zz0zRGMub3V0ZXJIZWlnaHQoKTtl
PTNEb1swXS1uLzIrInB4IjttPQo9M0RvWzFdLWcvMisicHgiO2MuY3NzKHtsZWZ0OmUsdG9wOm19
KTtjPTNEbnVsbH19O2EuanFwbG90LkJsb2NrQ2FudmFzPTNEZnU9Cm5jdGlvbigpe2EuanFwbG90
LkVsZW1Db250YWluZXIuY2FsbCh0aGlzKTt0aGlzLl9jdHh9O2EuanFwbG90LkJsb2NrQ2FudmFz
Lj0KcHJvdG90eXBlPTNEbmV3IGEuanFwbG90LkVsZW1Db250YWluZXIoKTthLmpxcGxvdC5CbG9j
a0NhbnZhcy5wcm90b3R5cGUuY29uPQpzdHJ1Y3Rvcj0zRGEuanFwbG90LkJsb2NrQ2FudmFzO2Eu
anFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5jcmVhdGVFbGVtZW49CnQ9M0RmdW5jdGlvbihp
LGUsYyl7dGhpcy5fb2Zmc2V0cz0zRGk7dmFyIGI9M0QianFwbG90LWJsb2NrQ2FudmFzIjtpZihl
IT0zRD0KdW5kZWZpbmVkKXtiPTNEZX12YXIgZztpZih0aGlzLl9lbGVtKXtnPTNEdGhpcy5fZWxl
bS5nZXQoMCl9ZWxzZXtnPTNEZG9jdW1lPQpudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1pZihjIT0z
RHVuZGVmaW5lZCl7dGhpcy5fcGxvdERpbWVuc2lvbnM9M0RjfXZhciBkPQo9M0R0aGlzLl9wbG90
RGltZW5zaW9ucy53aWR0aC10aGlzLl9vZmZzZXRzLmxlZnQtdGhpcy5fb2Zmc2V0cy5yaWdodCsi
cHgiO3Y9CmFyIGY9M0R0aGlzLl9wbG90RGltZW5zaW9ucy5oZWlnaHQtdGhpcy5fb2Zmc2V0cy50
b3AtdGhpcy5fb2Zmc2V0cy5ib3R0b20rIj0KcHgiO3RoaXMuX2VsZW09M0RhKGcpO3RoaXMuX2Vs
ZW0uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOmQsaGVpZ2h0OmYsPQpsZWZ0OnRoaXMu
X29mZnNldHMubGVmdCx0b3A6dGhpcy5fb2Zmc2V0cy50b3B9KTt0aGlzLl9lbGVtLmFkZENsYXNz
KGIpO3JldHU9CnJuIHRoaXMuX2VsZW19O2EuanFwbG90LkJsb2NrQ2FudmFzLnByb3RvdHlwZS5z
ZXRDb250ZXh0PTNEZnVuY3Rpb24oKXt0aGlzLj0KX2N0eD0zRHtjYW52YXM6e3dpZHRoOjAsaGVp
Z2h0OjB9LGNsZWFyUmVjdDpmdW5jdGlvbigpe3JldHVybiBudWxsfX07cmV0dXJuPQogdGhpcy5f
Y3R4fX0pKGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBkYjky
ZjZlMTliMzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRk
NWYyZmFjPQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9j
aGFydHMvc3RhdGljL3BsdWdpbnMvanFwbG89CnQvcGx1Z2lucy9qcXBsb3QuY2FudmFzQXhpc0xh
YmVsUmVuZGVyZXIubWluLmpzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvdC9wbHVnaW5zL2pxPQpwbG90
LmNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLm1pbi5qcwpAQCAtMCwwICsxLDMgQEAKKy8qIGpxUGxv
dCAxLjAuOHIxMjUwIHwgKGMpIDIwMDktMjAxMyBDaHJpcyBMZW9uZWxsbyB8IGpwbG90LmNvbQor
ICAganNEYXRlIHwgKGMpIDIwMTAtMjAxMyBDaHJpcyBMZW9uZWxsbworICovKGZ1bmN0aW9uKGEp
e2EuanFwbG90LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyPTNEZnVuY3Rpb24oYil7dGhpcy5hbmds
ZT0KPTNEMDt0aGlzLmF4aXM7dGhpcy5zaG93PTNEdHJ1ZTt0aGlzLnNob3dMYWJlbD0zRHRydWU7
dGhpcy5sYWJlbD0zRCIiO3RoaXMuPQpmb250RmFtaWx5PTNEJyJUcmVidWNoZXQgTVMiLCBBcmlh
bCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmJzt0aGlzLmZvbnRTaXplPQo9M0QiMTFwdCI7dGhpcy5m
b250V2VpZ2h0PTNEIm5vcm1hbCI7dGhpcy5mb250U3RyZXRjaD0zRDE7dGhpcy50ZXh0Q29sb3I9
M0Q9CiIjNjY2NjY2Ijt0aGlzLmVuYWJsZUZvbnRTdXBwb3J0PTNEdHJ1ZTt0aGlzLnB0MnB4PTNE
bnVsbDt0aGlzLl9lbGVtO3RoaXMuXz0KY3R4O3RoaXMuX3Bsb3RXaWR0aDt0aGlzLl9wbG90SGVp
Z2h0O3RoaXMuX3Bsb3REaW1lbnNpb25zPTNEe2hlaWdodDpudWxsLHdpPQpkdGg6bnVsbH07YS5l
eHRlbmQodHJ1ZSx0aGlzLGIpO2lmKGIuYW5nbGU9M0Q9M0RudWxsJiZ0aGlzLmF4aXMhPTNEInhh
eGlzIiY9CiZ0aGlzLmF4aXMhPTNEIngyYXhpcyIpe3RoaXMuYW5nbGU9M0QtOTB9dmFyIGM9M0R7
Zm9udFNpemU6dGhpcy5mb250U2l6ZSxmbz0KbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRT
dHJldGNoOnRoaXMuZm9udFN0cmV0Y2gsZmlsbFN0eWxlOnRoaXMudGV4dENvPQpsb3IsYW5nbGU6
dGhpcy5nZXRBbmdsZVJhZCgpLGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5fTtpZih0aGlzLnB0
MnB4KXtjLnA9CnQycHg9M0R0aGlzLnB0MnB4fWlmKHRoaXMuZW5hYmxlRm9udFN1cHBvcnQpe2lm
KGEuanFwbG90LnN1cHBvcnRfY2FudmFzX3RleD0KdCgpKXt0aGlzLl90ZXh0UmVuZGVyZXI9M0Ru
ZXcgYS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyKGMpfWVsc2V7dGhpcy5fdGV4PQp0UmVuZGVy
ZXI9M0RuZXcgYS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKGMpfX1lbHNle3RoaXMuX3RleHRS
ZW5kZXJlcj0zRG49CmV3IGEuanFwbG90LkNhbnZhc1RleHRSZW5kZXJlcihjKX19O2EuanFwbG90
LkNhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLnByb3RvdD0KeXBlLmluaXQ9M0RmdW5jdGlvbihiKXth
LmV4dGVuZCh0cnVlLHRoaXMsYik7dGhpcy5fdGV4dFJlbmRlcmVyLmluaXQoe2ZvbnRTPQppemU6
dGhpcy5mb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCxmb250U3RyZXRjaDp0aGlz
LmZvbnRTdHJldGNoLGY9CmlsbFN0eWxlOnRoaXMudGV4dENvbG9yLGFuZ2xlOnRoaXMuZ2V0QW5n
bGVSYWQoKSxmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseT0KfSl9O2EuanFwbG90LkNhbnZhc0F4
aXNMYWJlbFJlbmRlcmVyLnByb3RvdHlwZS5nZXRXaWR0aD0zRGZ1bmN0aW9uKGQpe2lmKHRoPQpp
cy5fZWxlbSl7cmV0dXJuIHRoaXMuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKX1lbHNle3ZhciBmPTNE
dGhpcy5fdGV4dFJlbmRlcmU9CnI7dmFyIGM9M0RmLmdldFdpZHRoKGQpO3ZhciBlPTNEZi5nZXRI
ZWlnaHQoZCk7dmFyIGI9M0RNYXRoLmFicyhNYXRoLnNpbihmLj0KYW5nbGUpKmUpK01hdGguYWJz
KE1hdGguY29zKGYuYW5nbGUpKmMpO3JldHVybiBifX07YS5qcXBsb3QuQ2FudmFzQXhpc0xhYmVs
PQpSZW5kZXJlci5wcm90b3R5cGUuZ2V0SGVpZ2h0PTNEZnVuY3Rpb24oZCl7aWYodGhpcy5fZWxl
bSl7cmV0dXJuIHRoaXMuX2VsZW09Ci5vdXRlckhlaWdodCh0cnVlKX1lbHNle3ZhciBmPTNEdGhp
cy5fdGV4dFJlbmRlcmVyO3ZhciBjPTNEZi5nZXRXaWR0aChkKTt2YT0KciBlPTNEZi5nZXRIZWln
aHQoZCk7dmFyIGI9M0RNYXRoLmFicyhNYXRoLmNvcyhmLmFuZ2xlKSplKStNYXRoLmFicyhNYXRo
LnNpPQpuKGYuYW5nbGUpKmMpO3JldHVybiBifX07YS5qcXBsb3QuQ2FudmFzQXhpc0xhYmVsUmVu
ZGVyZXIucHJvdG90eXBlLmdldEFuZ2w9CmVSYWQ9M0RmdW5jdGlvbigpe3ZhciBiPTNEdGhpcy5h
bmdsZSpNYXRoLlBJLzE4MDtyZXR1cm4gYn07YS5qcXBsb3QuQ2FudmFzQT0KeGlzTGFiZWxSZW5k
ZXJlci5wcm90b3R5cGUuZHJhdz0zRGZ1bmN0aW9uKGMsZil7aWYodGhpcy5fZWxlbSl7aWYoYS5q
cXBsb3QuPQp1c2VfZXhjYW52YXMmJndpbmRvdy5HX3ZtbENhbnZhc01hbmFnZXIudW5pbml0RWxl
bWVudCE9M0Q9M0R1bmRlZmluZWQpe3dpbmQ9Cm93Lkdfdm1sQ2FudmFzTWFuYWdlci51bmluaXRF
bGVtZW50KHRoaXMuX2VsZW0uZ2V0KDApKX10aGlzLl9lbGVtLmVtcHR5Rm9yYz0KZSgpO3RoaXMu
X2VsZW09M0RudWxsfXZhciBlPTNEZi5jYW52YXNNYW5hZ2VyLmdldENhbnZhcygpO3RoaXMuX3Rl
eHRSZW5kZXJlPQpyLnNldFRleHQodGhpcy5sYWJlbCxjKTt2YXIgYj0zRHRoaXMuZ2V0V2lkdGgo
Yyk7dmFyIGQ9M0R0aGlzLmdldEhlaWdodChjKTs9CmUud2lkdGg9M0RiO2UuaGVpZ2h0PTNEZDtl
LnN0eWxlLndpZHRoPTNEYjtlLnN0eWxlLmhlaWdodD0zRGQ7ZT0zRGYuY2FudmFzTT0KYW5hZ2Vy
LmluaXRDYW52YXMoZSk7dGhpcy5fZWxlbT0zRGEoZSk7dGhpcy5fZWxlbS5jc3Moe3Bvc2l0aW9u
OiJhYnNvbHV0ZSJ9PQopO3RoaXMuX2VsZW0uYWRkQ2xhc3MoImpxcGxvdC0iK3RoaXMuYXhpcysi
LWxhYmVsIik7ZT0zRG51bGw7cmV0dXJuIHRoaXMuX2U9CmxlbX07YS5qcXBsb3QuQ2FudmFzQXhp
c0xhYmVsUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9M0RmdW5jdGlvbigpe3RoaXMuX3RleD0KdFJl
bmRlcmVyLmRyYXcodGhpcy5fZWxlbS5nZXQoMCkuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmxhYmVs
KX19KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgZGI5MmY2
ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVm
MmZhYz0KOTNkODBmYmU5MzViYThjMjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh
cnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvPQp0L3BsdWdpbnMvanFwbG90LmNhbnZhc0F4aXNUaWNr
UmVuZGVyZXIubWluLmpzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvY2hhcnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvdC9wbHVnaW5zL2pxPQpwbG90LmNh
bnZhc0F4aXNUaWNrUmVuZGVyZXIubWluLmpzCkBAIC0wLDAgKzEsMyBAQAorLyoganFQbG90IDEu
MC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29tCisgICBq
c0RhdGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvCisgKi8oZnVuY3Rpb24oYSl7YS5q
cXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlcj0zRGZ1bmN0aW9uKGIpe3RoaXMubWFyaz0zRD0K
Im91dHNpZGUiO3RoaXMuc2hvd01hcms9M0R0cnVlO3RoaXMuc2hvd0dyaWRsaW5lPTNEdHJ1ZTt0
aGlzLmlzTWlub3JUaWNrPTNEPQpmYWxzZTt0aGlzLmFuZ2xlPTNEMDt0aGlzLm1hcmtTaXplPTNE
NDt0aGlzLnNob3c9M0R0cnVlO3RoaXMuc2hvd0xhYmVsPTNEdHI9CnVlO3RoaXMubGFiZWxQb3Np
dGlvbj0zRCJhdXRvIjt0aGlzLmxhYmVsPTNEIiI7dGhpcy52YWx1ZT0zRG51bGw7dGhpcy5fc3R5
bD0KZXM9M0R7fTt0aGlzLmZvcm1hdHRlcj0zRGEuanFwbG90LkRlZmF1bHRUaWNrRm9ybWF0dGVy
O3RoaXMuZm9ybWF0U3RyaW5nPTNEPQoiIjt0aGlzLnByZWZpeD0zRCIiO3RoaXMuZm9udEZhbWls
eT0zRCciVHJlYnVjaGV0IE1TIiwgQXJpYWwsIEhlbHZldGljYSwgc2E9Cm5zLXNlcmlmJzt0aGlz
LmZvbnRTaXplPTNEIjEwcHQiO3RoaXMuZm9udFdlaWdodD0zRCJub3JtYWwiO3RoaXMuZm9udFN0
cmV0Yz0KaD0zRDE7dGhpcy50ZXh0Q29sb3I9M0QiIzY2NjY2NiI7dGhpcy5lbmFibGVGb250U3Vw
cG9ydD0zRHRydWU7dGhpcy5wdDJweD0KPTNEbnVsbDt0aGlzLl9lbGVtO3RoaXMuX2N0eDt0aGlz
Ll9wbG90V2lkdGg7dGhpcy5fcGxvdEhlaWdodDt0aGlzLl9wbG90RGltPQplbnNpb25zPTNEe2hl
aWdodDpudWxsLHdpZHRoOm51bGx9O2EuZXh0ZW5kKHRydWUsdGhpcyxiKTt2YXIgYz0zRHtmb250
U2l6ZTo9CnRoaXMuZm9udFNpemUsZm9udFdlaWdodDp0aGlzLmZvbnRXZWlnaHQsZm9udFN0cmV0
Y2g6dGhpcy5mb250U3RyZXRjaCxmaWxsUz0KdHlsZTp0aGlzLnRleHRDb2xvcixhbmdsZTp0aGlz
LmdldEFuZ2xlUmFkKCksZm9udEZhbWlseTp0aGlzLmZvbnRGYW1pbHl9O2lmPQoodGhpcy5wdDJw
eCl7Yy5wdDJweD0zRHRoaXMucHQycHh9aWYodGhpcy5lbmFibGVGb250U3VwcG9ydCl7aWYoYS5q
cXBsb3Quc3U9CnBwb3J0X2NhbnZhc190ZXh0KCkpe3RoaXMuX3RleHRSZW5kZXJlcj0zRG5ldyBh
LmpxcGxvdC5DYW52YXNGb250UmVuZGVyZXIoYz0KKX1lbHNle3RoaXMuX3RleHRSZW5kZXJlcj0z
RG5ldyBhLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIoYyl9fWVsc2V7dGhpcy5fPQp0ZXh0UmVu
ZGVyZXI9M0RuZXcgYS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyKGMpfX07YS5qcXBsb3QuQ2Fu
dmFzQXhpc1RpY2s9ClJlbmRlcmVyLnByb3RvdHlwZS5pbml0PTNEZnVuY3Rpb24oYil7YS5leHRl
bmQodHJ1ZSx0aGlzLGIpO3RoaXMuX3RleHRSZW5kZT0KcmVyLmluaXQoe2ZvbnRTaXplOnRoaXMu
Zm9udFNpemUsZm9udFdlaWdodDp0aGlzLmZvbnRXZWlnaHQsZm9udFN0cmV0Y2g6dGhpPQpzLmZv
bnRTdHJldGNoLGZpbGxTdHlsZTp0aGlzLnRleHRDb2xvcixhbmdsZTp0aGlzLmdldEFuZ2xlUmFk
KCksZm9udEZhbWlseTo9CnRoaXMuZm9udEZhbWlseX0pfTthLmpxcGxvdC5DYW52YXNBeGlzVGlj
a1JlbmRlcmVyLnByb3RvdHlwZS5nZXRXaWR0aD0zRGZ1bj0KY3Rpb24oZCl7aWYodGhpcy5fZWxl
bSl7cmV0dXJuIHRoaXMuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKX1lbHNle3ZhciBmPTNEdGhpPQpz
Ll90ZXh0UmVuZGVyZXI7dmFyIGM9M0RmLmdldFdpZHRoKGQpO3ZhciBlPTNEZi5nZXRIZWlnaHQo
ZCk7dmFyIGI9M0RNYXRoLmE9CmJzKE1hdGguc2luKGYuYW5nbGUpKmUpK01hdGguYWJzKE1hdGgu
Y29zKGYuYW5nbGUpKmMpO3JldHVybiBifX07YS5qcXBsb3QuQz0KYW52YXNBeGlzVGlja1JlbmRl
cmVyLnByb3RvdHlwZS5nZXRIZWlnaHQ9M0RmdW5jdGlvbihkKXtpZih0aGlzLl9lbGVtKXtyZXR1
PQpybiB0aGlzLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7dmFyIGY9M0R0aGlzLl90ZXh0
UmVuZGVyZXI7dmFyIGM9M0RmLmc9CmV0V2lkdGgoZCk7dmFyIGU9M0RmLmdldEhlaWdodChkKTt2
YXIgYj0zRE1hdGguYWJzKE1hdGguY29zKGYuYW5nbGUpKmUpK01hdD0KaC5hYnMoTWF0aC5zaW4o
Zi5hbmdsZSkqYyk7cmV0dXJuIGJ9fTthLmpxcGxvdC5DYW52YXNBeGlzVGlja1JlbmRlcmVyLnBy
b3RvPQp0eXBlLmdldFRvcD0zRGZ1bmN0aW9uKGIpe2lmKHRoaXMuX2VsZW0pe3JldHVybiB0aGlz
Ll9lbGVtLnBvc2l0aW9uKCkudG9wfWU9CmxzZXtyZXR1cm4gbnVsbH19O2EuanFwbG90LkNhbnZh
c0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmdldEFuZ2xlUmFkPTNEZj0KdW5jdGlvbigpe3Zh
ciBiPTNEdGhpcy5hbmdsZSpNYXRoLlBJLzE4MDtyZXR1cm4gYn07YS5qcXBsb3QuQ2FudmFzQXhp
c1RpY2tSPQplbmRlcmVyLnByb3RvdHlwZS5zZXRUaWNrPTNEZnVuY3Rpb24oYixkLGMpe3RoaXMu
dmFsdWU9M0RiO2lmKGMpe3RoaXMuaXNNaW49Cm9yVGljaz0zRHRydWV9cmV0dXJuIHRoaXN9O2Eu
anFwbG90LkNhbnZhc0F4aXNUaWNrUmVuZGVyZXIucHJvdG90eXBlLmRyYXc9Cj0zRGZ1bmN0aW9u
KGMsZil7aWYoIXRoaXMubGFiZWwpe3RoaXMubGFiZWw9M0R0aGlzLnByZWZpeCt0aGlzLmZvcm1h
dHRlcih0aD0KaXMuZm9ybWF0U3RyaW5nLHRoaXMudmFsdWUpfWlmKHRoaXMuX2VsZW0pe2lmKGEu
anFwbG90LnVzZV9leGNhbnZhcyYmd2luZG93PQouR192bWxDYW52YXNNYW5hZ2VyLnVuaW5pdEVs
ZW1lbnQhPTNEPTNEdW5kZWZpbmVkKXt3aW5kb3cuR192bWxDYW52YXNNYW5hZ2U9CnIudW5pbml0
RWxlbWVudCh0aGlzLl9lbGVtLmdldCgwKSl9dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCk7dGhpcy5f
ZWxlbT0zRG51bD0KbH12YXIgZT0zRGYuY2FudmFzTWFuYWdlci5nZXRDYW52YXMoKTt0aGlzLl90
ZXh0UmVuZGVyZXIuc2V0VGV4dCh0aGlzLmxhYmVsPQosYyk7dmFyIGI9M0R0aGlzLmdldFdpZHRo
KGMpO3ZhciBkPTNEdGhpcy5nZXRIZWlnaHQoYyk7ZS53aWR0aD0zRGI7ZS5oZWlnaHQ9Cj0zRGQ7
ZS5zdHlsZS53aWR0aD0zRGI7ZS5zdHlsZS5oZWlnaHQ9M0RkO2Uuc3R5bGUudGV4dEFsaWduPTNE
ImxlZnQiO2Uuc3R5bD0KZS5wb3NpdGlvbj0zRCJhYnNvbHV0ZSI7ZT0zRGYuY2FudmFzTWFuYWdl
ci5pbml0Q2FudmFzKGUpO3RoaXMuX2VsZW09M0RhKGUpPQo7dGhpcy5fZWxlbS5jc3ModGhpcy5f
c3R5bGVzKTt0aGlzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3QtIit0aGlzLmF4aXMrIi10aWM9Cmsi
KTtlPTNEbnVsbDtyZXR1cm4gdGhpcy5fZWxlbX07YS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5k
ZXJlci5wcm90b3R5cGUucD0KYWNrPTNEZnVuY3Rpb24oKXt0aGlzLl90ZXh0UmVuZGVyZXIuZHJh
dyh0aGlzLl9lbGVtLmdldCgwKS5nZXRDb250ZXh0KCIyZCIpPQosdGhpcy5sYWJlbCl9fSkoalF1
ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4
MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9Cjkz
ZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0
aWMvcGx1Z2lucy9qcXBsbz0KdC9wbHVnaW5zL2pxcGxvdC5jYW52YXNPdmVybGF5Lm1pbi5qcwot
LS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9z
dGF0aWMvcGx1Z2lucy9qcXBsb3QvcGx1Z2lucy9qcT0KcGxvdC5jYW52YXNPdmVybGF5Lm1pbi5q
cwpAQCAtMCwwICsxLDMgQEAKKy8qIGpxUGxvdCAxLjAuOHIxMjUwIHwgKGMpIDIwMDktMjAxMyBD
aHJpcyBMZW9uZWxsbyB8IGpwbG90LmNvbQorICAganNEYXRlIHwgKGMpIDIwMTAtMjAxMyBDaHJp
cyBMZW9uZWxsbworICovKGZ1bmN0aW9uKGQpe3ZhciBmPTNEMDtkLmpxcGxvdC5DYW52YXNPdmVy
bGF5PTNEZnVuY3Rpb24ocSl7dmFyIG89M0RxfHw9Cnt9O3RoaXMub3B0aW9ucz0zRHtzaG93OmQu
anFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zLGRlZmVyRHJhdzpmYWxzZX07dGhpcz0KLm9iamVj
dHM9M0RbXTt0aGlzLm9iamVjdE5hbWVzPTNEW107dGhpcy5jYW52YXM9M0RudWxsO3RoaXMubWFy
a2VyUmVuZGVyZXI9Cj0zRG5ldyBkLmpxcGxvdC5NYXJrZXJSZW5kZXJlcih7c3R5bGU6ImxpbmUi
fSk7dGhpcy5tYXJrZXJSZW5kZXJlci5pbml0KCk7dD0KaGlzLmhpZ2hsaWdodE9iamVjdEluZGV4
PTNEbnVsbDtpZihvLm9iamVjdHMpe3ZhciBzPTNEby5vYmplY3RzLHI7Zm9yKHZhciBwPQo9M0Qw
O3A8cy5sZW5ndGg7cCsrKXtyPTNEc1twXTtmb3IodmFyIHQgaW4gcil7c3dpdGNoKHQpe2Nhc2Ui
bGluZSI6dGhpcy5hZGQ9CkxpbmUoclt0XSk7YnJlYWs7Y2FzZSJob3Jpem9udGFsTGluZSI6dGhp
cy5hZGRIb3Jpem9udGFsTGluZShyW3RdKTticmVhaztjYT0Kc2UiZGFzaGVkSG9yaXpvbnRhbExp
bmUiOnRoaXMuYWRkRGFzaGVkSG9yaXpvbnRhbExpbmUoclt0XSk7YnJlYWs7Y2FzZSJ2ZXJ0PQpp
Y2FsTGluZSI6dGhpcy5hZGRWZXJ0aWNhbExpbmUoclt0XSk7YnJlYWs7Y2FzZSJkYXNoZWRWZXJ0
aWNhbExpbmUiOnRoaXMuYWQ9CmREYXNoZWRWZXJ0aWNhbExpbmUoclt0XSk7YnJlYWs7Y2FzZSJy
ZWN0YW5nbGUiOnRoaXMuYWRkUmVjdGFuZ2xlKHJbdF0pO2JyZT0KYWs7ZGVmYXVsdDpicmVha319
fX1kLmV4dGVuZCh0cnVlLHRoaXMub3B0aW9ucyxvKX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5w
PQpvc3RQbG90SW5pdD0zRGZ1bmN0aW9uKHEscCxvKXt2YXIgbj0zRG98fHt9O3RoaXMucGx1Z2lu
cy5jYW52YXNPdmVybGF5PTNEbmU9CncgZC5qcXBsb3QuQ2FudmFzT3ZlcmxheShuLmNhbnZhc092
ZXJsYXkpfTtmdW5jdGlvbiBpKCl7dGhpcy51aWQ9M0RudWxsO3RoaT0Kcy50eXBlPTNEbnVsbDt0
aGlzLmdyaWRTdGFydD0zRG51bGw7dGhpcy5ncmlkU3RvcD0zRG51bGw7dGhpcy50b29sdGlwV2lk
dGhGPQphY3Rvcj0zRDA7dGhpcy5vcHRpb25zPTNEe25hbWU6bnVsbCxzaG93OnRydWUsbGluZVdp
ZHRoOjIsbGluZUNhcDoicm91bmQiLGM9Cm9sb3I6IiM2NjY2NjYiLHNoYWRvdzp0cnVlLHNoYWRv
d0FuZ2xlOjQ1LHNoYWRvd09mZnNldDoxLHNoYWRvd0RlcHRoOjMsc2hhZD0Kb3dBbHBoYToiMC4w
NyIseGF4aXM6InhheGlzIix5YXhpczoieWF4aXMiLHNob3dUb29sdGlwOmZhbHNlLHNob3dUb29s
dGlwUHJlPQpjaXNpb246MC42LHRvb2x0aXBMb2NhdGlvbjoibnciLGZhZGVUb29sdGlwOnRydWUs
dG9vbHRpcEZhZGVTcGVlZDoiZmFzdCIsdG89Cm9sdGlwT2Zmc2V0OjQsdG9vbHRpcEZvcm1hdFN0
cmluZzoiJWQsICVkIn19ZnVuY3Rpb24gbShuKXtpLmNhbGwodGhpcyk7dGhpcz0KLnR5cGU9M0Qi
cmVjdGFuZ2xlIjt2YXIgbz0zRHt4bWluOm51bGwseG1heDpudWxsLHhPZmZzZXQ6IjZweCIseG1p
bk9mZnNldDpuPQp1bGwseG1heE9mZnNldDpudWxsLHltaW46bnVsbCx5bWF4Om51bGwseU9mZnNl
dDoiNnB4Iix5bWluT2Zmc2V0Om51bGwseW1heE89CmZmc2V0Om51bGx9O2QuZXh0ZW5kKHRydWUs
dGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlYz0KaXNpb248
MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPTNEMC4wMX19bS5wcm90b3R5
cGU9M0RuZXcgaSgpPQo7bS5wcm90b3R5cGUuY29uc3RydWN0b3I9M0RtO2Z1bmN0aW9uIGIobil7
aS5jYWxsKHRoaXMpO3RoaXMudHlwZT0zRCJsaW5lIjs9CnZhciBvPTNEe3N0YXJ0OltdLHN0b3A6
W119O2QuZXh0ZW5kKHRydWUsdGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcHRpb25zLj0Kc2hv
d1Rvb2x0aXBQcmVjaXNpb248MC4wMSl7dGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9u
PTNEMC4wMX19Yi5wcm90PQpvdHlwZT0zRG5ldyBpKCk7Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9
M0RiO2Z1bmN0aW9uIGUobil7aS5jYWxsKHRoaXMpO3RoaXM9Ci50eXBlPTNEImhvcml6b250YWxM
aW5lIjt2YXIgbz0zRHt5Om51bGwseG1pbjpudWxsLHhtYXg6bnVsbCx4T2Zmc2V0OiI2cHgiLD0K
eG1pbk9mZnNldDpudWxsLHhtYXhPZmZzZXQ6bnVsbH07ZC5leHRlbmQodHJ1ZSx0aGlzLm9wdGlv
bnMsbyxuKTtpZih0aGlzLm9wPQp0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbjwwLjAxKXt0aGlz
Lm9wdGlvbnMuc2hvd1Rvb2x0aXBQcmVjaXNpb249M0QwLjAxfX09CmUucHJvdG90eXBlPTNEbmV3
IGkoKTtlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0zRGU7ZnVuY3Rpb24gaihuKXtpLmNhbGwodGhp
cz0KKTt0aGlzLnR5cGU9M0QiZGFzaGVkSG9yaXpvbnRhbExpbmUiO3ZhciBvPTNEe3k6bnVsbCx4
bWluOm51bGwseG1heDpudWxsLHhPPQpmZnNldDoiNnB4Iix4bWluT2Zmc2V0Om51bGwseG1heE9m
ZnNldDpudWxsLGRhc2hQYXR0ZXJuOls4LDhdfTtkLmV4dGVuZCh0cnU9CmUsdGhpcy5vcHRpb25z
LG8sbik7aWYodGhpcy5vcHRpb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPDAuMDEpe3RoaXMub3B0
aW9ucz0KLnNob3dUb29sdGlwUHJlY2lzaW9uPTNEMC4wMX19ai5wcm90b3R5cGU9M0RuZXcgaSgp
O2oucHJvdG90eXBlLmNvbnN0cnVjdG9yPQo9M0RqO2Z1bmN0aW9uIGMobil7aS5jYWxsKHRoaXMp
O3RoaXMudHlwZT0zRCJ2ZXJ0aWNhbExpbmUiO3ZhciBvPTNEe3g6bnVsbCw9CnltaW46bnVsbCx5
bWF4Om51bGwseU9mZnNldDoiNnB4Iix5bWluT2Zmc2V0Om51bGwseW1heE9mZnNldDpudWxsfTtk
LmV4dGVuZD0KKHRydWUsdGhpcy5vcHRpb25zLG8sbik7aWYodGhpcy5vcHRpb25zLnNob3dUb29s
dGlwUHJlY2lzaW9uPDAuMDEpe3RoaXMub3B0PQppb25zLnNob3dUb29sdGlwUHJlY2lzaW9uPTNE
MC4wMX19Yy5wcm90b3R5cGU9M0RuZXcgaSgpO2MucHJvdG90eXBlLmNvbnN0cnU9CmN0b3I9M0Rj
O2Z1bmN0aW9uIGwobil7aS5jYWxsKHRoaXMpO3RoaXMudHlwZT0zRCJkYXNoZWRWZXJ0aWNhbExp
bmUiO3RoaXMucz0KdGFydD0zRG51bGw7dGhpcy5zdG9wPTNEbnVsbDt2YXIgbz0zRHt4Om51bGws
eW1pbjpudWxsLHltYXg6bnVsbCx5T2Zmc2V0OiI2PQpweCIseW1pbk9mZnNldDpudWxsLHltYXhP
ZmZzZXQ6bnVsbCxkYXNoUGF0dGVybjpbOCw4XX07ZC5leHRlbmQodHJ1ZSx0aGlzLm89CnB0aW9u
cyxvLG4pO2lmKHRoaXMub3B0aW9ucy5zaG93VG9vbHRpcFByZWNpc2lvbjwwLjAxKXt0aGlzLm9w
dGlvbnMuc2hvd1Rvbz0KbHRpcFByZWNpc2lvbj0zRDAuMDF9fWwucHJvdG90eXBlPTNEbmV3IGko
KTtsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0zRGw7ZC5qPQpxcGxvdC5DYW52YXNPdmVybGF5LnBy
b3RvdHlwZS5hZGRMaW5lPTNEZnVuY3Rpb24obyl7dmFyIG49M0RuZXcgYihvKTtuLnVpZD0KPTNE
ZisrO3RoaXMub2JqZWN0cy5wdXNoKG4pO3RoaXMub2JqZWN0TmFtZXMucHVzaChuLm9wdGlvbnMu
bmFtZSl9O2QuanFwbG90PQouQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuYWRkSG9yaXpvbnRhbExp
bmU9M0RmdW5jdGlvbihvKXt2YXIgbj0zRG5ldyBlKG8pO249Ci51aWQ9M0RmKys7dGhpcy5vYmpl
Y3RzLnB1c2gobik7dGhpcy5vYmplY3ROYW1lcy5wdXNoKG4ub3B0aW9ucy5uYW1lKX07ZC5qcT0K
cGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5hZGREYXNoZWRIb3Jpem9udGFsTGluZT0zRGZ1
bmN0aW9uKG8pe3ZhciBuPTNEPQpuZXcgaihvKTtuLnVpZD0zRGYrKzt0aGlzLm9iamVjdHMucHVz
aChuKTt0aGlzLm9iamVjdE5hbWVzLnB1c2gobi5vcHRpb25zLm49CmFtZSl9O2QuanFwbG90LkNh
bnZhc092ZXJsYXkucHJvdG90eXBlLmFkZFZlcnRpY2FsTGluZT0zRGZ1bmN0aW9uKG8pe3ZhciBu
PQo9M0RuZXcgYyhvKTtuLnVpZD0zRGYrKzt0aGlzLm9iamVjdHMucHVzaChuKTt0aGlzLm9iamVj
dE5hbWVzLnB1c2gobi5vcHRpb249CnMubmFtZSl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJv
dG90eXBlLmFkZERhc2hlZFZlcnRpY2FsTGluZT0zRGZ1bmN0aW9uKD0Kbyl7dmFyIG49M0RuZXcg
bChvKTtuLnVpZD0zRGYrKzt0aGlzLm9iamVjdHMucHVzaChuKTt0aGlzLm9iamVjdE5hbWVzLnB1
c2goPQpuLm9wdGlvbnMubmFtZSl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLmFk
ZFJlY3RhbmdsZT0zRGZ1bmN0aW9uKG89Cil7dmFyIG49M0RuZXcgbShvKTtuLnVpZD0zRGYrKzt0
aGlzLm9iamVjdHMucHVzaChuKTt0aGlzLm9iamVjdE5hbWVzLnB1c2gobj0KLm9wdGlvbnMubmFt
ZSl9O2QuanFwbG90LkNhbnZhc092ZXJsYXkucHJvdG90eXBlLnJlbW92ZU9iamVjdD0zRGZ1bmN0
aW9uKG4pPQp7aWYoZC50eXBlKG4pPTNEPTNEIm51bWJlciIpe3RoaXMub2JqZWN0cy5zcGxpY2Uo
biwxKTt0aGlzLm9iamVjdE5hbWVzLnNwbGk9CmNlKG4sMSl9ZWxzZXt2YXIgbz0zRGQuaW5BcnJh
eShuLHRoaXMub2JqZWN0TmFtZXMpO2lmKG8hPTNELTEpe3RoaXMub2JqZWN0cz0KLnNwbGljZShv
LDEpO3RoaXMub2JqZWN0TmFtZXMuc3BsaWNlKG8sMSl9fX07ZC5qcXBsb3QuQ2FudmFzT3Zlcmxh
eS5wcm90b3R5PQpwZS5nZXRPYmplY3Q9M0RmdW5jdGlvbihuKXtpZihkLnR5cGUobik9M0Q9M0Qi
bnVtYmVyIil7cmV0dXJuIHRoaXMub2JqZWN0c1s9Cm5dfWVsc2V7dmFyIG89M0RkLmluQXJyYXko
bix0aGlzLm9iamVjdE5hbWVzKTtpZihvIT0zRC0xKXtyZXR1cm4gdGhpcy5vYmplYz0KdHNbb119
fX07ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90b3R5cGUuZ2V0PTNEZC5qcXBsb3QuQ2FudmFz
T3ZlcmxheS5wcm90PQpvdHlwZS5nZXRPYmplY3Q7ZC5qcXBsb3QuQ2FudmFzT3ZlcmxheS5wcm90
b3R5cGUuY2xlYXI9M0RmdW5jdGlvbihuKXt0aGlzLmM9CmFudmFzLl9jdHguY2xlYXJSZWN0KDAs
MCx0aGlzLmNhbnZhcy5nZXRXaWR0aCgpLHRoaXMuY2FudmFzLmdldEhlaWdodCgpKX07ZD0KLmpx
cGxvdC5DYW52YXNPdmVybGF5LnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24oSyl7dmFyIEEsdj0z
RHRoaXMub2JqZWN0cyxGPQo9M0R0aGlzLm1hcmtlclJlbmRlcmVyLHMsRztpZih0aGlzLm9wdGlv
bnMuc2hvdyl7dGhpcy5jYW52YXMuX2N0eC5jbGVhclJlY3Q9CigwLDAsdGhpcy5jYW52YXMuZ2V0
V2lkdGgoKSx0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSk7Zm9yKHZhciBIPTNEMDtIPHYubGVuZz0K
dGg7SCsrKXtBPTNEdltIXTt2YXIgQj0zRGQuZXh0ZW5kKHRydWUse30sQS5vcHRpb25zKTtpZihB
Lm9wdGlvbnMuc2hvdyl7Ri5zPQpoYWRvdz0zREEub3B0aW9ucy5zaGFkb3c7QS50b29sdGlwV2lk
dGhGYWN0b3I9M0RBLm9wdGlvbnMubGluZVdpZHRoL0Eub3B0aW89Cm5zLnNob3dUb29sdGlwUHJl
Y2lzaW9uO3N3aXRjaChBLnR5cGUpe2Nhc2UibGluZSI6Ri5zdHlsZT0zRCJsaW5lIjtCLmNsb3Nl
UD0KYXRoPTNEZmFsc2U7cz0zRFtLLmF4ZXNbQS5vcHRpb25zLnhheGlzXS5zZXJpZXNfdTJwKEEu
b3B0aW9ucy5zdGFydFswXSksSy5hPQp4ZXNbQS5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJwKEEu
b3B0aW9ucy5zdGFydFsxXSldO0c9M0RbSy5heGVzW0Eub3B0aW9ucy49CnhheGlzXS5zZXJpZXNf
dTJwKEEub3B0aW9ucy5zdG9wWzBdKSxLLmF4ZXNbQS5vcHRpb25zLnlheGlzXS5zZXJpZXNfdTJw
KEEubz0KcHRpb25zLnN0b3BbMV0pXTtBLmdyaWRTdGFydD0zRHM7QS5ncmlkU3RvcD0zREc7Ri5k
cmF3KHMsRyx0aGlzLmNhbnZhcy5fY3R4PQosQik7YnJlYWs7Y2FzZSJob3Jpem9udGFsTGluZSI6
aWYoQS5vcHRpb25zLnkhPTNEbnVsbCl7Ri5zdHlsZT0zRCJsaW5lIjtCLmM9Cmxvc2VQYXRoPTNE
ZmFsc2U7dmFyIHA9M0RLLmF4ZXNbQS5vcHRpb25zLnhheGlzXSxTLEwsdz0zREsuYXhlc1tBLm9w
dGlvbnMueT0KYXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueSksST0zREEub3B0aW9ucy54bWlu
T2Zmc2V0fHxBLm9wdGlvbnMueE9mZnNldCx0PQo9M0RBLm9wdGlvbnMueG1heE9mZnNldHx8QS5v
cHRpb25zLnhPZmZzZXQ7aWYoQS5vcHRpb25zLnhtaW4hPTNEbnVsbCl7Uz0zRHA9Ci5zZXJpZXNf
dTJwKEEub3B0aW9ucy54bWluKX1lbHNle2lmKEkhPTNEbnVsbCl7aWYoZC50eXBlKEkpPTNEPTNE
Im51bWJlciIpez0KUz0zRHAuc2VyaWVzX3UycChwLm1pbitJKX1lbHNle2lmKGQudHlwZShJKT0z
RD0zRCJzdHJpbmciKXtTPTNEcC5zZXJpZXNfdTJwPQoocC5taW4pK3BhcnNlRmxvYXQoSSl9fX19
aWYoQS5vcHRpb25zLnhtYXghPTNEbnVsbCl7TD0zRHAuc2VyaWVzX3UycChBLm9wdGk9Cm9ucy54
bWF4KX1lbHNle2lmKHQhPTNEbnVsbCl7aWYoZC50eXBlKHQpPTNEPTNEIm51bWJlciIpe0w9M0Rw
LnNlcmllc191MnAocD0KLm1heC10KX1lbHNle2lmKGQudHlwZSh0KT0zRD0zRCJzdHJpbmciKXtM
PTNEcC5zZXJpZXNfdTJwKHAubWF4KS1wYXJzZUZsb2F0PQoodCl9fX19aWYoTCE9M0RudWxsJiZT
IT0zRG51bGwpe0EuZ3JpZFN0YXJ0PTNEW1Msd107QS5ncmlkU3RvcD0zRFtMLHddO0YuZHI9CmF3
KFtTLHddLFtMLHddLHRoaXMuY2FudmFzLl9jdHgsQil9fWJyZWFrO2Nhc2UiZGFzaGVkSG9yaXpv
bnRhbExpbmUiOnZhciBvPQo9M0RBLm9wdGlvbnMuZGFzaFBhdHRlcm47dmFyIEU9M0QwO2Zvcih2
YXIgTT0zRDA7TTxvLmxlbmd0aDtNKyspe0UrPTNEb1tNXX09CmlmKEEub3B0aW9ucy55IT0zRG51
bGwpe0Yuc3R5bGU9M0QibGluZSI7Qi5jbG9zZVBhdGg9M0RmYWxzZTt2YXIgcD0zREsuYXhlcz0K
W0Eub3B0aW9ucy54YXhpc10sUyxMLHc9M0RLLmF4ZXNbQS5vcHRpb25zLnlheGlzXS5zZXJpZXNf
dTJwKEEub3B0aW9ucy55KSxJPQo9M0RBLm9wdGlvbnMueG1pbk9mZnNldHx8QS5vcHRpb25zLnhP
ZmZzZXQsdD0zREEub3B0aW9ucy54bWF4T2Zmc2V0fHxBLm9wdGk9Cm9ucy54T2Zmc2V0O2lmKEEu
b3B0aW9ucy54bWluIT0zRG51bGwpe1M9M0RwLnNlcmllc191MnAoQS5vcHRpb25zLnhtaW4pfWVs
cz0KZXtpZihJIT0zRG51bGwpe2lmKGQudHlwZShJKT0zRD0zRCJudW1iZXIiKXtTPTNEcC5zZXJp
ZXNfdTJwKHAubWluK0kpfWVsc2V7PQppZihkLnR5cGUoSSk9M0Q9M0Qic3RyaW5nIil7Uz0zRHAu
c2VyaWVzX3UycChwLm1pbikrcGFyc2VGbG9hdChJKX19fX1pZihBLm89CnB0aW9ucy54bWF4IT0z
RG51bGwpe0w9M0RwLnNlcmllc191MnAoQS5vcHRpb25zLnhtYXgpfWVsc2V7aWYodCE9M0RudWxs
KXtpZj0KKGQudHlwZSh0KT0zRD0zRCJudW1iZXIiKXtMPTNEcC5zZXJpZXNfdTJwKHAubWF4LXQp
fWVsc2V7aWYoZC50eXBlKHQpPTNEPTNEPQoic3RyaW5nIil7TD0zRHAuc2VyaWVzX3UycChwLm1h
eCktcGFyc2VGbG9hdCh0KX19fX1pZihMIT0zRG51bGwmJlMhPTNEbnVsbCk9CntBLmdyaWRTdGFy
dD0zRFtTLHddO0EuZ3JpZFN0b3A9M0RbTCx3XTt2YXIgcj0zRE1hdGguY2VpbCgoTC1TKS9FKTt2
YXIgUT0zRD0KUyxPO2Zvcih2YXIgTT0zRDA7TTxyO00rKyl7Zm9yKHZhciBKPTNEMDtKPG8ubGVu
Z3RoO0orPTNEMil7Tz0zRFErb1tKXTtGLmRyPQphdyhbUSx3XSxbTyx3XSx0aGlzLmNhbnZhcy5f
Y3R4LEIpO1ErPTNEb1tKXTtpZihKPG8ubGVuZ3RoLTEpe1ErPTNEb1tKKzFdfX09Cn19fWJyZWFr
O2Nhc2UidmVydGljYWxMaW5lIjppZihBLm9wdGlvbnMueCE9M0RudWxsKXtGLnN0eWxlPTNEImxp
bmUiO0IuY2xvcz0KZVBhdGg9M0RmYWxzZTt2YXIgTj0zREsuYXhlc1tBLm9wdGlvbnMueWF4aXNd
LG4sdSx6PTNESy5heGVzW0Eub3B0aW9ucy54YXhpPQpzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy54
KSxEPTNEQS5vcHRpb25zLnltaW5PZmZzZXR8fEEub3B0aW9ucy55T2Zmc2V0LHE9M0Q9CkEub3B0
aW9ucy55bWF4T2Zmc2V0fHxBLm9wdGlvbnMueU9mZnNldDtpZihBLm9wdGlvbnMueW1pbiE9M0Ru
dWxsKXtuPTNETi5zZT0Kcmllc191MnAoQS5vcHRpb25zLnltaW4pfWVsc2V7aWYoRCE9M0RudWxs
KXtpZihkLnR5cGUoRCk9M0Q9M0QibnVtYmVyIil7bj0KPTNETi5zZXJpZXNfdTJwKE4ubWluLUQp
fWVsc2V7aWYoZC50eXBlKEQpPTNEPTNEInN0cmluZyIpe249M0ROLnNlcmllc191MnAoPQpOLm1p
biktcGFyc2VGbG9hdChEKX19fX1pZihBLm9wdGlvbnMueW1heCE9M0RudWxsKXt1PTNETi5zZXJp
ZXNfdTJwKEEub3B0aW89Cm5zLnltYXgpfWVsc2V7aWYocSE9M0RudWxsKXtpZihkLnR5cGUocSk9
M0Q9M0QibnVtYmVyIil7dT0zRE4uc2VyaWVzX3UycChOLj0KbWF4K3EpfWVsc2V7aWYoZC50eXBl
KHEpPTNEPTNEInN0cmluZyIpe3U9M0ROLnNlcmllc191MnAoTi5tYXgpK3BhcnNlRmxvYXQoPQpx
KX19fX1pZih1IT0zRG51bGwmJm4hPTNEbnVsbCl7QS5ncmlkU3RhcnQ9M0RbeixuXTtBLmdyaWRT
dG9wPTNEW3osdV07Ri5kcmE9CncoW3osbl0sW3osdV0sdGhpcy5jYW52YXMuX2N0eCxCKX19YnJl
YWs7Y2FzZSJkYXNoZWRWZXJ0aWNhbExpbmUiOnZhciBvPTNEQT0KLm9wdGlvbnMuZGFzaFBhdHRl
cm47dmFyIEU9M0QwO2Zvcih2YXIgTT0zRDA7TTxvLmxlbmd0aDtNKyspe0UrPTNEb1tNXX1pZihB
PQoub3B0aW9ucy54IT0zRG51bGwpe0Yuc3R5bGU9M0QibGluZSI7Qi5jbG9zZVBhdGg9M0RmYWxz
ZTt2YXIgTj0zREsuYXhlc1tBLm89CnB0aW9ucy55YXhpc10sbix1LHo9M0RLLmF4ZXNbQS5vcHRp
b25zLnhheGlzXS5zZXJpZXNfdTJwKEEub3B0aW9ucy54KSxEPTNEQT0KLm9wdGlvbnMueW1pbk9m
ZnNldHx8QS5vcHRpb25zLnlPZmZzZXQscT0zREEub3B0aW9ucy55bWF4T2Zmc2V0fHxBLm9wdGlv
bnMuPQp5T2Zmc2V0O2lmKEEub3B0aW9ucy55bWluIT0zRG51bGwpe249M0ROLnNlcmllc191MnAo
QS5vcHRpb25zLnltaW4pfWVsc2V7aWY9CihEIT0zRG51bGwpe2lmKGQudHlwZShEKT0zRD0zRCJu
dW1iZXIiKXtuPTNETi5zZXJpZXNfdTJwKE4ubWluLUQpfWVsc2V7aWYoZD0KLnR5cGUoRCk9M0Q9
M0Qic3RyaW5nIil7bj0zRE4uc2VyaWVzX3UycChOLm1pbiktcGFyc2VGbG9hdChEKX19fX1pZihB
Lm9wdGlvPQpucy55bWF4IT0zRG51bGwpe3U9M0ROLnNlcmllc191MnAoQS5vcHRpb25zLnltYXgp
fWVsc2V7aWYocSE9M0RudWxsKXtpZihkLnQ9CnlwZShxKT0zRD0zRCJudW1iZXIiKXt1PTNETi5z
ZXJpZXNfdTJwKE4ubWF4K3EpfWVsc2V7aWYoZC50eXBlKHEpPTNEPTNEInN0cj0KaW5nIil7dT0z
RE4uc2VyaWVzX3UycChOLm1heCkrcGFyc2VGbG9hdChxKX19fX1pZih1IT0zRG51bGwmJm4hPTNE
bnVsbCl7QS5nPQpyaWRTdGFydD0zRFt6LG5dO0EuZ3JpZFN0b3A9M0Rbeix1XTt2YXIgcj0zRE1h
dGguY2VpbCgobi11KS9FKTt2YXIgQz0zRCgocio9CkUpLShuLXUpKS8yO3ZhciBRPTNEbixPLFAs
Ujtmb3IodmFyIE09M0QwO008cjtNKyspe2Zvcih2YXIgSj0zRDA7SjxvLmxlbmd0aD0KO0orPTNE
Mil7Tz0zRFEtb1tKXTtpZihPPHUpe089M0R1fWlmKFE8dSl7UT0zRHV9Ri5kcmF3KFt6LFFdLFt6
LE9dLHRoaXMuY2FuPQp2YXMuX2N0eCxCKTtRLT0zRG9bSl07aWYoSjxvLmxlbmd0aC0xKXtRLT0z
RG9bSisxXX19fX19YnJlYWs7Y2FzZSJyZWN0YW5nbGU9CiI6Ri5zdHlsZT0zRCJsaW5lIjtCLmNs
b3NlUGF0aD0zRHRydWU7dmFyIHA9M0RLLmF4ZXNbQS5vcHRpb25zLnhheGlzXSxTLEwsdz0KPTNE
Sy5heGVzW0Eub3B0aW9ucy55YXhpc10uc2VyaWVzX3UycChBLm9wdGlvbnMueSksST0zREEub3B0
aW9ucy54bWluT2Zmc2V0PQp8fEEub3B0aW9ucy54T2Zmc2V0LHQ9M0RBLm9wdGlvbnMueG1heE9m
ZnNldHx8QS5vcHRpb25zLnhPZmZzZXQ7aWYoQS5vcHRpb249CnMueG1pbiE9M0RudWxsKXtTPTNE
cC5zZXJpZXNfdTJwKEEub3B0aW9ucy54bWluKX1lbHNle2lmKEkhPTNEbnVsbCl7aWYoZC50eT0K
cGUoSSk9M0Q9M0QibnVtYmVyIil7Uz0zRHAuc2VyaWVzX3UycChwLm1pbitJKX1lbHNle2lmKGQu
dHlwZShJKT0zRD0zRCJzdHJpPQpuZyIpe1M9M0RwLnNlcmllc191MnAocC5taW4pK3BhcnNlRmxv
YXQoSSl9fX19aWYoQS5vcHRpb25zLnhtYXghPTNEbnVsbCl7TD0KPTNEcC5zZXJpZXNfdTJwKEEu
b3B0aW9ucy54bWF4KX1lbHNle2lmKHQhPTNEbnVsbCl7aWYoZC50eXBlKHQpPTNEPTNEIm51bWJl
PQpyIil7TD0zRHAuc2VyaWVzX3UycChwLm1heC10KX1lbHNle2lmKGQudHlwZSh0KT0zRD0zRCJz
dHJpbmciKXtMPTNEcC5zZXJpZXM9Cl91MnAocC5tYXgpLXBhcnNlRmxvYXQodCl9fX19dmFyIE49
M0RLLmF4ZXNbQS5vcHRpb25zLnlheGlzXSxuLHUsej0zREsuYXhlcz0KW0Eub3B0aW9ucy54YXhp
c10uc2VyaWVzX3UycChBLm9wdGlvbnMueCksRD0zREEub3B0aW9ucy55bWluT2Zmc2V0fHxBLm9w
dGlvPQpucy55T2Zmc2V0LHE9M0RBLm9wdGlvbnMueW1heE9mZnNldHx8QS5vcHRpb25zLnlPZmZz
ZXQ7aWYoQS5vcHRpb25zLnltaW4hPQo9M0RudWxsKXtuPTNETi5zZXJpZXNfdTJwKEEub3B0aW9u
cy55bWluKX1lbHNle2lmKEQhPTNEbnVsbCl7aWYoZC50eXBlKEQpPQo9M0Q9M0QibnVtYmVyIil7
bj0zRE4uc2VyaWVzX3UycChOLm1pbi1EKX1lbHNle2lmKGQudHlwZShEKT0zRD0zRCJzdHJpbmci
KXs9Cm49M0ROLnNlcmllc191MnAoTi5taW4pLXBhcnNlRmxvYXQoRCl9fX19aWYoQS5vcHRpb25z
LnltYXghPTNEbnVsbCl7dT0zRE4ucz0KZXJpZXNfdTJwKEEub3B0aW9ucy55bWF4KX1lbHNle2lm
KHEhPTNEbnVsbCl7aWYoZC50eXBlKHEpPTNEPTNEIm51bWJlciIpe3U9Cj0zRE4uc2VyaWVzX3Uy
cChOLm1heCtxKX1lbHNle2lmKGQudHlwZShxKT0zRD0zRCJzdHJpbmciKXt1PTNETi5zZXJpZXNf
dTJwKD0KTi5tYXgpK3BhcnNlRmxvYXQocSl9fX19aWYoTCE9M0RudWxsJiZTIT0zRG51bGwmJnUh
PTNEbnVsbCYmbiE9M0RudWxsKXtBLmdyPQppZFN0YXJ0PTNEW1Msbl07QS5ncmlkU3RvcD0zRFtM
LHVdO3RoaXMuY2FudmFzLl9jdHguZmlsbFN0eWxlPTNEQS5vcHRpb25zLmM9Cm9sb3I7dGhpcy5j
YW52YXMuX2N0eC5maWxsUmVjdChTLG4sTC1TLHUtbil9YnJlYWs7ZGVmYXVsdDpicmVha319fX19
O2QuanFwbD0Kb3QuQ2FudmFzT3ZlcmxheS5wb3N0UGxvdERyYXc9M0RmdW5jdGlvbigpe3ZhciBv
PTNEdGhpcy5wbHVnaW5zLmNhbnZhc092ZXJsPQpheTtpZihvJiZvLmhpZ2hsaWdodENhbnZhcyl7
by5oaWdobGlnaHRDYW52YXMucmVzZXRDYW52YXMoKTtvLmhpZ2hsaWdodENhbnY9CmFzPTNEbnVs
bH1vLmNhbnZhcz0zRG5ldyBkLmpxcGxvdC5HZW5lcmljQ2FudmFzKCk7dGhpcy5ldmVudENhbnZh
cy5fZWxlbS5iZT0KZm9yZShvLmNhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5n
LCJqcXBsb3Qtb3ZlcmxheUNhbnZhcy1jYW52YXMiPQosdGhpcy5fcGxvdERpbWVuc2lvbnMsdGhp
cykpO28uY2FudmFzLnNldENvbnRleHQoKTtpZighby5kZWZlckRyYXcpe28uZHJhdyg9CnRoaXMp
fXZhciBuPTNEZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5fdG9vbHRpcEVsZW09M0Rk
KG4pO249M0RudWxsOz0Kby5fdG9vbHRpcEVsZW0uYWRkQ2xhc3MoImpxcGxvdC1jYW52YXNPdmVy
bGF5LXRvb2x0aXAiKTtvLl90b29sdGlwRWxlbS5jc3MoPQp7cG9zaXRpb246ImFic29sdXRlIixk
aXNwbGF5OiJub25lIn0pO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmVmb3JlKG8uX3Rvb2w9CnRp
cEVsZW0pO3RoaXMuZXZlbnRDYW52YXMuX2VsZW0uYmluZCgibW91c2VsZWF2ZSIse2VsZW06by5f
dG9vbHRpcEVsZW19LGZ1bj0KY3Rpb24ocCl7cC5kYXRhLmVsZW0uaGlkZSgpfSk7dmFyIG89M0Ru
dWxsfTtmdW5jdGlvbiBrKHMscSxyLHApe3ZhciB1PTNEcy5wPQpsdWdpbnMuY2FudmFzT3Zlcmxh
eTt2YXIgbz0zRHUuX3Rvb2x0aXBFbGVtO3ZhciBuPTNEcS5vcHRpb25zLHYsdDtvLmh0bWwoZC49
CmpxcGxvdC5zcHJpbnRmKG4udG9vbHRpcEZvcm1hdFN0cmluZyxwWzBdLHBbMV0pKTtzd2l0Y2go
bi50b29sdGlwTG9jYXRpb24pez0KY2FzZSJudyI6dj0zRHJbMF0rcy5fZ3JpZFBhZGRpbmcubGVm
dC1vLm91dGVyV2lkdGgodHJ1ZSktbi50b29sdGlwT2Zmc2V0O3Q9Cj0zRHJbMV0rcy5fZ3JpZFBh
ZGRpbmcudG9wLW4udG9vbHRpcE9mZnNldC1vLm91dGVySGVpZ2h0KHRydWUpO2JyZWFrO2Nhc2Ui
bj0KIjp2PTNEclswXStzLl9ncmlkUGFkZGluZy5sZWZ0LW8ub3V0ZXJXaWR0aCh0cnVlKS8yO3Q9
M0RyWzFdK3MuX2dyaWRQYWRkaW5nPQoudG9wLW4udG9vbHRpcE9mZnNldC1vLm91dGVySGVpZ2h0
KHRydWUpO2JyZWFrO2Nhc2UibmUiOnY9M0RyWzBdK3MuX2dyaWRQYWQ9CmRpbmcubGVmdCtuLnRv
b2x0aXBPZmZzZXQ7dD0zRHJbMV0rcy5fZ3JpZFBhZGRpbmcudG9wLW4udG9vbHRpcE9mZnNldC1v
Lm91dD0KZXJIZWlnaHQodHJ1ZSk7YnJlYWs7Y2FzZSJlIjp2PTNEclswXStzLl9ncmlkUGFkZGlu
Zy5sZWZ0K24udG9vbHRpcE9mZnNldDt0PQo9M0RyWzFdK3MuX2dyaWRQYWRkaW5nLnRvcC1vLm91
dGVySGVpZ2h0KHRydWUpLzI7YnJlYWs7Y2FzZSJzZSI6dj0zRHJbMF0rcy49Cl9ncmlkUGFkZGlu
Zy5sZWZ0K24udG9vbHRpcE9mZnNldDt0PTNEclsxXStzLl9ncmlkUGFkZGluZy50b3Arbi50b29s
dGlwT2Zmcz0KZXQ7YnJlYWs7Y2FzZSJzIjp2PTNEclswXStzLl9ncmlkUGFkZGluZy5sZWZ0LW8u
b3V0ZXJXaWR0aCh0cnVlKS8yO3Q9M0RyWzFdPQorcy5fZ3JpZFBhZGRpbmcudG9wK24udG9vbHRp
cE9mZnNldDticmVhaztjYXNlInN3Ijp2PTNEclswXStzLl9ncmlkUGFkZGluZy49CmxlZnQtby5v
dXRlcldpZHRoKHRydWUpLW4udG9vbHRpcE9mZnNldDt0PTNEclsxXStzLl9ncmlkUGFkZGluZy50
b3Arbi50b29sdD0KaXBPZmZzZXQ7YnJlYWs7Y2FzZSJ3Ijp2PTNEclswXStzLl9ncmlkUGFkZGlu
Zy5sZWZ0LW8ub3V0ZXJXaWR0aCh0cnVlKS1uLnRvPQpvbHRpcE9mZnNldDt0PTNEclsxXStzLl9n
cmlkUGFkZGluZy50b3Atby5vdXRlckhlaWdodCh0cnVlKS8yO2JyZWFrO2RlZmF1bHQ9Cjp2PTNE
clswXStzLl9ncmlkUGFkZGluZy5sZWZ0LW8ub3V0ZXJXaWR0aCh0cnVlKS1uLnRvb2x0aXBPZmZz
ZXQ7dD0zRHJbMV0rcz0KLl9ncmlkUGFkZGluZy50b3Atbi50b29sdGlwT2Zmc2V0LW8ub3V0ZXJI
ZWlnaHQodHJ1ZSk7YnJlYWt9by5jc3MoImxlZnQiLHYpPQo7by5jc3MoInRvcCIsdCk7aWYobi5m
YWRlVG9vbHRpcCl7by5zdG9wKHRydWUsdHJ1ZSkuZmFkZUluKG4udG9vbHRpcEZhZGVTcGU9CmVk
KX1lbHNle28uc2hvdygpfW89M0RudWxsfWZ1bmN0aW9uIGgoeixxLHMscCl7dmFyIG89M0R6WzBd
O3ZhciBuPTNEelsxXTt2YT0KciB5PTNETWF0aC5yb3VuZChzWzBdKTt2YXIgeD0zRE1hdGgucm91
bmQoc1sxXSk7dmFyIHU9M0RNYXRoLnJvdW5kKHFbMF0pO3ZhPQpyIHQ9M0RNYXRoLnJvdW5kKHFb
MV0pO3ZhciByPTNETWF0aC5zcXJ0KE1hdGgucG93KHktdSwyKStNYXRoLnBvdyh4LXQsMikpO3Y9
CmFyIEE9M0RwKnI7dmFyIHc9M0RNYXRoLmFicygodS15KSoobi14KS0odC14KSooby15KSk7dmFy
IHY9M0QodzxBKT90cnVlOmZhbD0Kc2U7cmV0dXJuIHZ9ZnVuY3Rpb24gZyh4LHEscixwKXt2YXIg
bz0zRHhbMF07dmFyIG49M0R4WzFdO3ZhciB3PTNETWF0aC5yb3VuPQpkKHJbMF0pO3ZhciB2PTNE
TWF0aC5yb3VuZChyWzFdKTt2YXIgdD0zRE1hdGgucm91bmQocVswXSk7dmFyIHM9M0RNYXRoLnJv
dW49CmQocVsxXSk7dmFyIHk7aWYodz50KXt5PTNEdzt3PTNEdDt0PTNEeX1pZih2PnMpe3k9M0R2
O3Y9M0RzO3M9M0R5fXZhciB1PTNEKD0Kbz49M0R3JiZvPD0zRHQmJm4+PTNEdiYmbjw9M0RzKTty
ZXR1cm4gdX1mdW5jdGlvbiBhKHosdyxyLEEseCl7dmFyIHk9M0R4LnBsPQp1Z2lucy5jYW52YXNP
dmVybGF5O3ZhciB2PTNEeS5vYmplY3RzO3ZhciBzPTNEdi5sZW5ndGg7dmFyIHUsbz0zRGZhbHNl
O3ZhciA9CnE7Zm9yKHZhciB0PTNEMDt0PHM7dCsrKXt1PTNEdlt0XTtpZih1Lm9wdGlvbnMuc2hv
d1Rvb2x0aXApe3ZhciBwO2lmKHUudHlwZT0KPTNEPTNEPTNEInJlY3RhbmdsZSIpe3A9M0RnKFt3
Lngsdy55XSx1LmdyaWRTdGFydCx1LmdyaWRTdG9wLHUudG9vbHRpcFdpZHRoPQpGYWN0b3IpfWVs
c2V7cD0zRGgoW3cueCx3LnldLHUuZ3JpZFN0YXJ0LHUuZ3JpZFN0b3AsdS50b29sdGlwV2lkdGhG
YWN0b3IpfXI9Cj0zRFt4LmF4ZXNbdS5vcHRpb25zLnhheGlzXS5zZXJpZXNfcDJ1KHcueCkseC5h
eGVzW3Uub3B0aW9ucy55YXhpc10uc2VyaWVzXz0KcDJ1KHcueSldO2lmKHAmJnkuaGlnaGxpZ2h0
T2JqZWN0SW5kZXg9M0Q9M0RudWxsKXtzd2l0Y2godS50eXBlKXtjYXNlImxpbmUiPQo6ayh4LHUs
W3cueCx3LnldLHIpO2JyZWFrO2Nhc2UiaG9yaXpvbnRhbExpbmUiOmNhc2UiZGFzaGVkSG9yaXpv
bnRhbExpbmUiOms9Cih4LHUsW3cueCx1LmdyaWRTdGFydFsxXV0sW3JbMF0sdS5vcHRpb25zLnld
KTticmVhaztjYXNlInZlcnRpY2FsTGluZSI6Y2FzZT0KImRhc2hlZFZlcnRpY2FsTGluZSI6ayh4
LHUsW3UuZ3JpZFN0YXJ0WzBdLHcueV0sW3Uub3B0aW9ucy54LHJbMV1dKTticmVhaztjPQphc2Ui
cmVjdGFuZ2xlIjprKHgsdSxbdS5ncmlkU3RhcnRbMF0sdy55XSxbdS5vcHRpb25zLngsclsxXV0p
O2JyZWFrO2RlZmF1bHQ9CjpicmVha315LmhpZ2hsaWdodE9iamVjdEluZGV4PTNEdDtvPTNEdHJ1
ZTticmVha31lbHNle2lmKHAmJnkuaGlnaGxpZ2h0T2JqZT0KY3RJbmRleCE9M0Q9M0R0KXtxPTNE
eS5fdG9vbHRpcEVsZW07aWYodS5mYWRlVG9vbHRpcCl7cS5mYWRlT3V0KHUudG9vbHRpcEZhPQpk
ZVNwZWVkKX1lbHNle3EuaGlkZSgpfXN3aXRjaCh1LnR5cGUpe2Nhc2UibGluZSI6ayh4LHUsW3cu
eCx3LnldLHIpO2JyZWFrO2M9CmFzZSJob3Jpem9udGFsTGluZSI6Y2FzZSJkYXNoZWRIb3Jpem9u
dGFsTGluZSI6ayh4LHUsW3cueCx1LmdyaWRTdGFydFsxXV0sWz0KclswXSx1Lm9wdGlvbnMueV0p
O2JyZWFrO2Nhc2UidmVydGljYWxMaW5lIjpjYXNlImRhc2hlZFZlcnRpY2FsTGluZSI6ayh4LHUs
PQpbdS5ncmlkU3RhcnRbMF0sdy55XSxbdS5vcHRpb25zLngsclsxXV0pO2JyZWFrO2Nhc2UicmVj
dGFuZ2xlIjprKHgsdSxbdS5ncmk9CmRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7
YnJlYWs7ZGVmYXVsdDpicmVha315LmhpZ2hsaWdodE9iamVjdEluZD0KZXg9M0R0O289M0R0cnVl
O2JyZWFrfWVsc2V7aWYocCl7c3dpdGNoKHUudHlwZSl7Y2FzZSJsaW5lIjprKHgsdSxbdy54LHcu
eV0sPQpyKTticmVhaztjYXNlImhvcml6b250YWxMaW5lIjpjYXNlImRhc2hlZEhvcml6b250YWxM
aW5lIjprKHgsdSxbdy54LHUuZ3JpZFM9CnRhcnRbMV1dLFtyWzBdLHUub3B0aW9ucy55XSk7YnJl
YWs7Y2FzZSJ2ZXJ0aWNhbExpbmUiOmNhc2UiZGFzaGVkVmVydGljYWxMaT0KbmUiOmsoeCx1LFt1
LmdyaWRTdGFydFswXSx3LnldLFt1Lm9wdGlvbnMueCxyWzFdXSk7YnJlYWs7Y2FzZSJyZWN0YW5n
bGUiOmsoPQp4LHUsW3UuZ3JpZFN0YXJ0WzBdLHcueV0sW3Uub3B0aW9ucy54LHJbMV1dKTticmVh
aztkZWZhdWx0OmJyZWFrfW89M0R0cnVlO2I9CnJlYWt9fX19fWlmKCFvJiZ5LmhpZ2hsaWdodE9i
amVjdEluZGV4IT0zRD0zRG51bGwpe3E9M0R5Ll90b29sdGlwRWxlbTt1PTNEeT0KLmdldE9iamVj
dCh5LmhpZ2hsaWdodE9iamVjdEluZGV4KTtpZih1LmZhZGVUb29sdGlwKXtxLmZhZGVPdXQodS50
b29sdGlwRmFkPQplU3BlZWQpfWVsc2V7cS5oaWRlKCl9eS5oaWdobGlnaHRPYmplY3RJbmRleD0z
RG51bGx9fWQuanFwbG90LnBvc3RJbml0SG9va3M9Ci5wdXNoKGQuanFwbG90LkNhbnZhc092ZXJs
YXkucG9zdFBsb3RJbml0KTtkLmpxcGxvdC5wb3N0RHJhd0hvb2tzLnB1c2goZC5qcT0KcGxvdC5D
YW52YXNPdmVybGF5LnBvc3RQbG90RHJhdyk7ZC5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1
c2goWyJqcXBsb3RNPQpvdXNlTW92ZSIsYV0pfSkoalF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3
NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsbz0KdC9wbHVn
aW5zL2pxcGxvdC5jYW52YXNUZXh0UmVuZGVyZXIubWluLmpzCi0tLSAvZGV2L251bGwKKysrIGIv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxv
dC9wbHVnaW5zL2pxPQpwbG90LmNhbnZhc1RleHRSZW5kZXJlci5taW4uanMKQEAgLTAsMCArMSwz
IEBACisvKiBqcVBsb3QgMS4wLjhyMTI1MCB8IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8g
fCBqcGxvdC5jb20KKyAgIGpzRGF0ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAq
LyhmdW5jdGlvbihhKXthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXI9M0RmdW5jdGlvbihiKXt0
aGlzLmZvbnRTdHlsZT0KPTNEIm5vcm1hbCI7dGhpcy5mb250VmFyaWFudD0zRCJub3JtYWwiO3Ro
aXMuZm9udFdlaWdodD0zRCJub3JtYWwiO3RoaXMuZm9uPQp0U2l6ZT0zRCIxMHB4Ijt0aGlzLmZv
bnRGYW1pbHk9M0Qic2Fucy1zZXJpZiI7dGhpcy5mb250U3RyZXRjaD0zRDE7dGhpcy5maWw9CmxT
dHlsZT0zRCIjNjY2NjY2Ijt0aGlzLmFuZ2xlPTNEMDt0aGlzLnRleHRBbGlnbj0zRCJzdGFydCI7
dGhpcy50ZXh0QmFzZWxpbj0KZT0zRCJhbHBoYWJldGljIjt0aGlzLnRleHQ7dGhpcy53aWR0aDt0
aGlzLmhlaWdodDt0aGlzLnB0MnB4PTNEMS4yODthLmV4dGVuPQpkKHRydWUsdGhpcyxiKTt0aGlz
Lm5vcm1hbGl6ZWRGb250U2l6ZT0zRHRoaXMubm9ybWFsaXplRm9udFNpemUodGhpcy5mb250U2k9
CnplKTt0aGlzLnNldEhlaWdodCgpfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90
eXBlLmluaXQ9M0RmdW5jdGlvbj0KKGIpe2EuZXh0ZW5kKHRydWUsdGhpcyxiKTt0aGlzLm5vcm1h
bGl6ZWRGb250U2l6ZT0zRHRoaXMubm9ybWFsaXplRm9udFNpemUoPQp0aGlzLmZvbnRTaXplKTt0
aGlzLnNldEhlaWdodCgpfTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLm5v
cm09CmFsaXplRm9udFNpemU9M0RmdW5jdGlvbihiKXtiPTNEU3RyaW5nKGIpO3ZhciBjPTNEcGFy
c2VGbG9hdChiKTtpZihiLmluZGV4Tz0KZigicHgiKT4tMSl7cmV0dXJuIGMvdGhpcy5wdDJweH1l
bHNle2lmKGIuaW5kZXhPZigicHQiKT4tMSl7cmV0dXJuIGN9ZWxzZXtpPQpmKGIuaW5kZXhPZigi
ZW0iKT4tMSl7cmV0dXJuIGMqMTJ9ZWxzZXtpZihiLmluZGV4T2YoIiUiKT4tMSl7cmV0dXJuIGMq
MTIvMTA9CjB9ZWxzZXtyZXR1cm4gYy90aGlzLnB0MnB4fX19fX07YS5qcXBsb3QuQ2FudmFzVGV4
dFJlbmRlcmVyLnByb3RvdHlwZS5mb250Vz0KZWlnaHQyRmxvYXQ9M0RmdW5jdGlvbihiKXtpZihO
dW1iZXIoYikpe3JldHVybiBiLzQwMH1lbHNle3N3aXRjaChiKXtjYXNlIm5vPQpybWFsIjpyZXR1
cm4gMTticmVhaztjYXNlImJvbGQiOnJldHVybiAxLjc1O2JyZWFrO2Nhc2UiYm9sZGVyIjpyZXR1
cm4gMi4yNTs9CmJyZWFrO2Nhc2UibGlnaHRlciI6cmV0dXJuIDAuNzU7YnJlYWs7ZGVmYXVsdDpy
ZXR1cm4gMTticmVha319fTthLmpxcGxvdC5DYT0KbnZhc1RleHRSZW5kZXJlci5wcm90b3R5cGUu
Z2V0VGV4dD0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH07YS5qcXBsb3QuPQpDYW52YXNU
ZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldFRleHQ9M0RmdW5jdGlvbihjLGIpe3RoaXMudGV4dD0z
RGM7dGhpcy5zZXQ9CldpZHRoKGIpO3JldHVybiB0aGlzfTthLmpxcGxvdC5DYW52YXNUZXh0UmVu
ZGVyZXIucHJvdG90eXBlLmdldFdpZHRoPTNEZnVuYz0KdGlvbihiKXtyZXR1cm4gdGhpcy53aWR0
aH07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5zZXRXaWR0aD0KPTNEZnVu
Y3Rpb24oYyxiKXtpZighYil7dGhpcy53aWR0aD0zRHRoaXMubWVhc3VyZShjLHRoaXMudGV4dCl9
ZWxzZXt0aGlzLndpPQpkdGg9M0RifXJldHVybiB0aGlzfTthLmpxcGxvdC5DYW52YXNUZXh0UmVu
ZGVyZXIucHJvdG90eXBlLmdldEhlaWdodD0zRGZ1bmM9CnRpb24oYil7cmV0dXJuIHRoaXMuaGVp
Z2h0fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLnNldEhlaWdodD0KPTNE
ZnVuY3Rpb24oYil7aWYoIWIpe3RoaXMuaGVpZ2h0PTNEdGhpcy5ub3JtYWxpemVkRm9udFNpemUq
dGhpcy5wdDJweH1lbHNlPQp7dGhpcy5oZWlnaHQ9M0RifXJldHVybiB0aGlzfTthLmpxcGxvdC5D
YW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxldHRlcj0KPTNEZnVuY3Rpb24oYil7cmV0dXJu
IHRoaXMubGV0dGVyc1tiXX07YS5qcXBsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLnByb3RvdHlwPQpl
LmFzY2VudD0zRGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplZEZvbnRTaXplfTthLmpx
cGxvdC5DYW52YXNUZXh0UmU9Cm5kZXJlci5wcm90b3R5cGUuZGVzY2VudD0zRGZ1bmN0aW9uKCl7
cmV0dXJuIDcqdGhpcy5ub3JtYWxpemVkRm9udFNpemUvMjV9Oz0KYS5qcXBsb3QuQ2FudmFzVGV4
dFJlbmRlcmVyLnByb3RvdHlwZS5tZWFzdXJlPTNEZnVuY3Rpb24oZCxnKXt2YXIgZj0zRDA7dmFy
PQogYj0zRGcubGVuZ3RoO2Zvcih2YXIgZT0zRDA7ZTxiO2UrKyl7dmFyIGg9M0R0aGlzLmxldHRl
cihnLmNoYXJBdChlKSk7aWYoaCk9CntmKz0zRGgud2lkdGgqdGhpcy5ub3JtYWxpemVkRm9udFNp
emUvMjUqdGhpcy5mb250U3RyZXRjaH19cmV0dXJuIGZ9O2EuanFwbD0Kb3QuQ2FudmFzVGV4dFJl
bmRlcmVyLnByb3RvdHlwZS5kcmF3PTNEZnVuY3Rpb24ocyxuKXt2YXIgcj0zRDA7dmFyIG89M0R0
aGlzPQouaGVpZ2h0KjAuNzI7dmFyIHA9M0QwO3ZhciBsPTNEbi5sZW5ndGg7dmFyIGs9M0R0aGlz
Lm5vcm1hbGl6ZWRGb250U2l6ZS8yNTs9CnMuc2F2ZSgpO3ZhciBoLGY7aWYoKC1NYXRoLlBJLzI8
PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0QwKXx8KE1hdGguUEkqMz0KLzI8PTNEdGhpcy5h
bmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjIpKXtoPTNEMDtmPTNELU1hdGguc2luKHRoaXMu
YW5nbGUpPQoqdGhpcy53aWR0aH1lbHNle2lmKCgwPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8PTNE
TWF0aC5QSS8yKXx8KC1NYXRoLlBJKjI8PQo9M0R0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPD0zRC1N
YXRoLlBJKjMvMikpe2g9M0RNYXRoLnNpbih0aGlzLmFuZ2xlKSp0aGlzLmg9CmVpZ2h0O2Y9M0Qw
fWVsc2V7aWYoKC1NYXRoLlBJPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8LU1hdGguUEkvMil8fChN
YXRoLlBJPD0KPTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjMvMikpe2g9M0Qt
TWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy53PQppZHRoO2Y9M0QtTWF0aC5zaW4odGhpcy5hbmds
ZSkqdGhpcy53aWR0aC1NYXRoLmNvcyh0aGlzLmFuZ2xlKSp0aGlzLmhlaWdodH09CmVsc2V7aWYo
KC1NYXRoLlBJKjMvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPE1hdGguUEkpfHwoTWF0aC5QSS8y
PHRoaXMuYW5nbD0KZSYmdGhpcy5hbmdsZTxNYXRoLlBJKSl7aD0zRE1hdGguc2luKHRoaXMuYW5n
bGUpKnRoaXMuaGVpZ2h0LU1hdGguY29zKHRoaXMuPQphbmdsZSkqdGhpcy53aWR0aDtmPTNELU1h
dGguY29zKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0fX19fXMuc3Ryb2tlU3R5bGU9M0Q9CnRoaXMu
ZmlsbFN0eWxlO3MuZmlsbFN0eWxlPTNEdGhpcy5maWxsU3R5bGU7cy50cmFuc2xhdGUoaCxmKTtz
LnJvdGF0ZSh0aGlzLj0KYW5nbGUpO3MubGluZUNhcD0zRCJyb3VuZCI7dmFyIHQ9M0QodGhpcy5u
b3JtYWxpemVkRm9udFNpemU+MzApPzI6MisoMzAtdGhpPQpzLm5vcm1hbGl6ZWRGb250U2l6ZSkv
MjA7cy5saW5lV2lkdGg9M0R0KmsqdGhpcy5mb250V2VpZ2h0MkZsb2F0KHRoaXMuZm9udFc9CmVp
Z2h0KTtmb3IodmFyIGc9M0QwO2c8bDtnKyspe3ZhciBtPTNEdGhpcy5sZXR0ZXIobi5jaGFyQXQo
ZykpO2lmKCFtKXtjb250aT0KbnVlfXMuYmVnaW5QYXRoKCk7dmFyIGU9M0QxO3ZhciBiPTNEMDtm
b3IodmFyIGQ9M0QwO2Q8bS5wb2ludHMubGVuZ3RoO2QrKyl7PQp2YXIgcT0zRG0ucG9pbnRzW2Rd
O2lmKHFbMF09M0Q9M0QtMSYmcVsxXT0zRD0zRC0xKXtlPTNEMTtjb250aW51ZX1pZihlKXtzLm09
Cm92ZVRvKHIrcVswXSprKnRoaXMuZm9udFN0cmV0Y2gsby1xWzFdKmspO2U9M0RmYWxzZX1lbHNl
e3MubGluZVRvKHIrcVswXSprKj0KdGhpcy5mb250U3RyZXRjaCxvLXFbMV0qayl9fXMuc3Ryb2tl
KCk7cis9M0RtLndpZHRoKmsqdGhpcy5mb250U3RyZXRjaH1zLnJlPQpzdG9yZSgpO3JldHVybiBw
fTthLmpxcGxvdC5DYW52YXNUZXh0UmVuZGVyZXIucHJvdG90eXBlLmxldHRlcnM9M0R7IiAiOnt3
aWQ9CnRoOjE2LHBvaW50czpbXX0sIiEiOnt3aWR0aDoxMCxwb2ludHM6W1s1LDIxXSxbNSw3XSxb
LTEsLTFdLFs1LDJdLFs0LDFdLFs1LD0KMF0sWzYsMV0sWzUsMl1dfSwnIic6e3dpZHRoOjE2LHBv
aW50czpbWzQsMjFdLFs0LDE0XSxbLTEsLTFdLFsxMiwyMV0sWzEyLDE0PQpdXX0sIiMiOnt3aWR0
aDoyMSxwb2ludHM6W1sxMSwyNV0sWzQsLTddLFstMSwtMV0sWzE3LDI1XSxbMTAsLTddLFstMSwt
MV0sWzQ9CiwxMl0sWzE4LDEyXSxbLTEsLTFdLFszLDZdLFsxNyw2XV19LCIkIjp7d2lkdGg6MjAs
cG9pbnRzOltbOCwyNV0sWzgsLTRdLFstMT0KLC0xXSxbMTIsMjVdLFsxMiwtNF0sWy0xLC0xXSxb
MTcsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV0sWzUsMjBdLFszLDE4XSxbPQozLDE2XSxbNCwx
NF0sWzUsMTNdLFs3LDEyXSxbMTMsMTBdLFsxNSw5XSxbMTYsOF0sWzE3LDZdLFsxNywzXSxbMTUs
MV0sWzEyLDA9Cl0sWzgsMF0sWzUsMV0sWzMsM11dfSwiJSI6e3dpZHRoOjI0LHBvaW50czpbWzIx
LDIxXSxbMywwXSxbLTEsLTFdLFs4LDIxXSxbMT0KMCwxOV0sWzEwLDE3XSxbOSwxNV0sWzcsMTRd
LFs1LDE0XSxbMywxNl0sWzMsMThdLFs0LDIwXSxbNiwyMV0sWzgsMjFdLFsxMCwyPQowXSxbMTMs
MTldLFsxNiwxOV0sWzE5LDIwXSxbMjEsMjFdLFstMSwtMV0sWzE3LDddLFsxNSw2XSxbMTQsNF0s
WzE0LDJdLFsxNiw9CjBdLFsxOCwwXSxbMjAsMV0sWzIxLDNdLFsyMSw1XSxbMTksN10sWzE3LDdd
XX0sIiYiOnt3aWR0aDoyNixwb2ludHM6W1syMywxMj0KXSxbMjMsMTNdLFsyMiwxNF0sWzIxLDE0
XSxbMjAsMTNdLFsxOSwxMV0sWzE3LDZdLFsxNSwzXSxbMTMsMV0sWzExLDBdLFs3LDBdPQosWzUs
MV0sWzQsMl0sWzMsNF0sWzMsNl0sWzQsOF0sWzUsOV0sWzEyLDEzXSxbMTMsMTRdLFsxNCwxNl0s
WzE0LDE4XSxbMTMsMjA9Cl0sWzExLDIxXSxbOSwyMF0sWzgsMThdLFs4LDE2XSxbOSwxM10sWzEx
LDEwXSxbMTYsM10sWzE4LDFdLFsyMCwwXSxbMjIsMF0sWz0KMjMsMV0sWzIzLDJdXX0sIiciOnt3
aWR0aDoxMCxwb2ludHM6W1s1LDE5XSxbNCwyMF0sWzUsMjFdLFs2LDIwXSxbNiwxOF0sWzUsPQox
Nl0sWzQsMTVdXX0sIigiOnt3aWR0aDoxNCxwb2ludHM6W1sxMSwyNV0sWzksMjNdLFs3LDIwXSxb
NSwxNl0sWzQsMTFdLFs0LDc9Cl0sWzUsMl0sWzcsLTJdLFs5LC01XSxbMTEsLTddXX0sIikiOnt3
aWR0aDoxNCxwb2ludHM6W1szLDI1XSxbNSwyM10sWzcsMjBdLD0KWzksMTZdLFsxMCwxMV0sWzEw
LDddLFs5LDJdLFs3LC0yXSxbNSwtNV0sWzMsLTddXX0sIioiOnt3aWR0aDoxNixwb2ludHM6W1s4
PQosMjFdLFs4LDldLFstMSwtMV0sWzMsMThdLFsxMywxMl0sWy0xLC0xXSxbMTMsMThdLFszLDEy
XV19LCIrIjp7d2lkdGg6MjYscG89CmludHM6W1sxMywxOF0sWzEzLDBdLFstMSwtMV0sWzQsOV0s
WzIyLDldXX0sIiwiOnt3aWR0aDoxMCxwb2ludHM6W1s2LDFdLFs1LD0KMF0sWzQsMV0sWzUsMl0s
WzYsMV0sWzYsLTFdLFs1LC0zXSxbNCwtNF1dfSwiLSI6e3dpZHRoOjE4LHBvaW50czpbWzYsOV0s
WzEyPQosOV1dfSwiLiI6e3dpZHRoOjEwLHBvaW50czpbWzUsMl0sWzQsMV0sWzUsMF0sWzYsMV0s
WzUsMl1dfSwiLyI6e3dpZHRoOjIyLHA9Cm9pbnRzOltbMjAsMjVdLFsyLC03XV19LCIwIjp7d2lk
dGg6MjAscG9pbnRzOltbOSwyMV0sWzYsMjBdLFs0LDE3XSxbMywxMl0sWz0KMyw5XSxbNCw0XSxb
NiwxXSxbOSwwXSxbMTEsMF0sWzE0LDFdLFsxNiw0XSxbMTcsOV0sWzE3LDEyXSxbMTYsMTddLFsx
NCwyMF0sPQpbMTEsMjFdLFs5LDIxXV19LCIxIjp7d2lkdGg6MjAscG9pbnRzOltbNiwxN10sWzgs
MThdLFsxMSwyMV0sWzExLDBdXX0sIjIiOns9CndpZHRoOjIwLHBvaW50czpbWzQsMTZdLFs0LDE3
XSxbNSwxOV0sWzYsMjBdLFs4LDIxXSxbMTIsMjFdLFsxNCwyMF0sWzE1LDE5XT0KLFsxNiwxN10s
WzE2LDE1XSxbMTUsMTNdLFsxMywxMF0sWzMsMF0sWzE3LDBdXX0sIjMiOnt3aWR0aDoyMCxwb2lu
dHM6W1s1LDIxPQpdLFsxNiwyMV0sWzEwLDEzXSxbMTMsMTNdLFsxNSwxMl0sWzE2LDExXSxbMTcs
OF0sWzE3LDZdLFsxNiwzXSxbMTQsMV0sWzExLDA9Cl0sWzgsMF0sWzUsMV0sWzQsMl0sWzMsNF1d
fSwiNCI6e3dpZHRoOjIwLHBvaW50czpbWzEzLDIxXSxbMyw3XSxbMTgsN10sWy0xLD0KLTFdLFsx
MywyMV0sWzEzLDBdXX0sIjUiOnt3aWR0aDoyMCxwb2ludHM6W1sxNSwyMV0sWzUsMjFdLFs0LDEy
XSxbNSwxM10sWzgsPQoxNF0sWzExLDE0XSxbMTQsMTNdLFsxNiwxMV0sWzE3LDhdLFsxNyw2XSxb
MTYsM10sWzE0LDFdLFsxMSwwXSxbOCwwXSxbNSwxXSw9Cls0LDJdLFszLDRdXX0sIjYiOnt3aWR0
aDoyMCxwb2ludHM6W1sxNiwxOF0sWzE1LDIwXSxbMTIsMjFdLFsxMCwyMV0sWzcsMjBdLD0KWzUs
MTddLFs0LDEyXSxbNCw3XSxbNSwzXSxbNywxXSxbMTAsMF0sWzExLDBdLFsxNCwxXSxbMTYsM10s
WzE3LDZdLFsxNyw3XSxbPQoxNiwxMF0sWzE0LDEyXSxbMTEsMTNdLFsxMCwxM10sWzcsMTJdLFs1
LDEwXSxbNCw3XV19LCI3Ijp7d2lkdGg6MjAscG9pbnRzOls9ClsxNywyMV0sWzcsMF0sWy0xLC0x
XSxbMywyMV0sWzE3LDIxXV19LCI4Ijp7d2lkdGg6MjAscG9pbnRzOltbOCwyMV0sWzUsMjBdLD0K
WzQsMThdLFs0LDE2XSxbNSwxNF0sWzcsMTNdLFsxMSwxMl0sWzE0LDExXSxbMTYsOV0sWzE3LDdd
LFsxNyw0XSxbMTYsMl0sWzE1PQosMV0sWzEyLDBdLFs4LDBdLFs1LDFdLFs0LDJdLFszLDRdLFsz
LDddLFs0LDldLFs2LDExXSxbOSwxMl0sWzEzLDEzXSxbMTUsMTQ9Cl0sWzE2LDE2XSxbMTYsMThd
LFsxNSwyMF0sWzEyLDIxXSxbOCwyMV1dfSwiOSI6e3dpZHRoOjIwLHBvaW50czpbWzE2LDE0XSxb
MT0KNSwxMV0sWzEzLDldLFsxMCw4XSxbOSw4XSxbNiw5XSxbNCwxMV0sWzMsMTRdLFszLDE1XSxb
NCwxOF0sWzYsMjBdLFs5LDIxXSxbPQoxMCwyMV0sWzEzLDIwXSxbMTUsMThdLFsxNiwxNF0sWzE2
LDldLFsxNSw0XSxbMTMsMV0sWzEwLDBdLFs4LDBdLFs1LDFdLFs0LDM9Cl1dfSwiOiI6e3dpZHRo
OjEwLHBvaW50czpbWzUsMTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdLFs1LDE0XSxbLTEsLTFdLFs1
LDJdLD0KWzQsMV0sWzUsMF0sWzYsMV0sWzUsMl1dfSwiOyI6e3dpZHRoOjEwLHBvaW50czpbWzUs
MTRdLFs0LDEzXSxbNSwxMl0sWzYsMTNdPQosWzUsMTRdLFstMSwtMV0sWzYsMV0sWzUsMF0sWzQs
MV0sWzUsMl0sWzYsMV0sWzYsLTFdLFs1LC0zXSxbNCwtNF1dfSwiPCI6e3c9CmlkdGg6MjQscG9p
bnRzOltbMjAsMThdLFs0LDldLFsyMCwwXV19LCI9M0QiOnt3aWR0aDoyNixwb2ludHM6W1s0LDEy
XSxbMjIsMT0KMl0sWy0xLC0xXSxbNCw2XSxbMjIsNl1dfSwiPiI6e3dpZHRoOjI0LHBvaW50czpb
WzQsMThdLFsyMCw5XSxbNCwwXV19LCI/Ijp7PQp3aWR0aDoxOCxwb2ludHM6W1szLDE2XSxbMywx
N10sWzQsMTldLFs1LDIwXSxbNywyMV0sWzExLDIxXSxbMTMsMjBdLFsxNCwxOV09CixbMTUsMTdd
LFsxNSwxNV0sWzE0LDEzXSxbMTMsMTJdLFs5LDEwXSxbOSw3XSxbLTEsLTFdLFs5LDJdLFs4LDFd
LFs5LDBdLFsxMD0KLDFdLFs5LDJdXX0sIkAiOnt3aWR0aDoyNyxwb2ludHM6W1sxOCwxM10sWzE3
LDE1XSxbMTUsMTZdLFsxMiwxNl0sWzEwLDE1XSxbPQo5LDE0XSxbOCwxMV0sWzgsOF0sWzksNl0s
WzExLDVdLFsxNCw1XSxbMTYsNl0sWzE3LDhdLFstMSwtMV0sWzEyLDE2XSxbMTAsMTQ9Cl0sWzks
MTFdLFs5LDhdLFsxMCw2XSxbMTEsNV0sWy0xLC0xXSxbMTgsMTZdLFsxNyw4XSxbMTcsNl0sWzE5
LDVdLFsyMSw1XSxbMj0KMyw3XSxbMjQsMTBdLFsyNCwxMl0sWzIzLDE1XSxbMjIsMTddLFsyMCwx
OV0sWzE4LDIwXSxbMTUsMjFdLFsxMiwyMV0sWzksMjBdPQosWzcsMTldLFs1LDE3XSxbNCwxNV0s
WzMsMTJdLFszLDldLFs0LDZdLFs1LDRdLFs3LDJdLFs5LDFdLFsxMiwwXSxbMTUsMF0sWzE9Cjgs
MV0sWzIwLDJdLFsyMSwzXSxbLTEsLTFdLFsxOSwxNl0sWzE4LDhdLFsxOCw2XSxbMTksNV1dfSxB
Ont3aWR0aDoxOCxwb2ludD0KczpbWzksMjFdLFsxLDBdLFstMSwtMV0sWzksMjFdLFsxNywwXSxb
LTEsLTFdLFs0LDddLFsxNCw3XV19LEI6e3dpZHRoOjIxLHBvPQppbnRzOltbNCwyMV0sWzQsMF0s
Wy0xLC0xXSxbNCwyMV0sWzEzLDIxXSxbMTYsMjBdLFsxNywxOV0sWzE4LDE3XSxbMTgsMTVdLFs9
CjE3LDEzXSxbMTYsMTJdLFsxMywxMV0sWy0xLC0xXSxbNCwxMV0sWzEzLDExXSxbMTYsMTBdLFsx
Nyw5XSxbMTgsN10sWzE4LDRdLD0KWzE3LDJdLFsxNiwxXSxbMTMsMF0sWzQsMF1dfSxDOnt3aWR0
aDoyMSxwb2ludHM6W1sxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxPQozLDIxXSxbOSwyMV0sWzcs
MjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNdLFs3LDFdLFs5LDBdLFsx
Myw9CjBdLFsxNSwxXSxbMTcsM10sWzE4LDVdXX0sRDp7d2lkdGg6MjEscG9pbnRzOltbNCwyMV0s
WzQsMF0sWy0xLC0xXSxbNCwyMV0sWz0KMTEsMjFdLFsxNCwyMF0sWzE2LDE4XSxbMTcsMTZdLFsx
OCwxM10sWzE4LDhdLFsxNyw1XSxbMTYsM10sWzE0LDFdLFsxMSwwXSxbPQo0LDBdXX0sRTp7d2lk
dGg6MTkscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0xLC0xXSxbNCwyMV0sWzE3LDIxXSxbLTEsLTFd
LFs0LDE9CjFdLFsxMiwxMV0sWy0xLC0xXSxbNCwwXSxbMTcsMF1dfSxGOnt3aWR0aDoxOCxwb2lu
dHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLD0KWzQsMjFdLFsxNywyMV0sWy0xLC0xXSxbNCwxMV0s
WzEyLDExXV19LEc6e3dpZHRoOjIxLHBvaW50czpbWzE4LDE2XSxbMTcsMThdPQosWzE1LDIwXSxb
MTMsMjFdLFs5LDIxXSxbNywyMF0sWzUsMThdLFs0LDE2XSxbMywxM10sWzMsOF0sWzQsNV0sWzUs
M10sWzcsMV09CixbOSwwXSxbMTMsMF0sWzE1LDFdLFsxNywzXSxbMTgsNV0sWzE4LDhdLFstMSwt
MV0sWzEzLDhdLFsxOCw4XV19LEg6e3dpZHRoOj0KMjIscG9pbnRzOltbNCwyMV0sWzQsMF0sWy0x
LC0xXSxbMTgsMjFdLFsxOCwwXSxbLTEsLTFdLFs0LDExXSxbMTgsMTFdXX0sSTp7PQp3aWR0aDo4
LHBvaW50czpbWzQsMjFdLFs0LDBdXX0sSjp7d2lkdGg6MTYscG9pbnRzOltbMTIsMjFdLFsxMiw1
XSxbMTEsMl0sWzE9CjAsMV0sWzgsMF0sWzYsMF0sWzQsMV0sWzMsMl0sWzIsNV0sWzIsN11dfSxL
Ont3aWR0aDoyMSxwb2ludHM6W1s0LDIxXSxbNCwwXT0KLFstMSwtMV0sWzE4LDIxXSxbNCw3XSxb
LTEsLTFdLFs5LDEyXSxbMTgsMF1dfSxMOnt3aWR0aDoxNyxwb2ludHM6W1s0LDIxXSxbPQo0LDBd
LFstMSwtMV0sWzQsMF0sWzE2LDBdXX0sTTp7d2lkdGg6MjQscG9pbnRzOltbNCwyMV0sWzQsMF0s
Wy0xLC0xXSxbNCwyMV09CixbMTIsMF0sWy0xLC0xXSxbMjAsMjFdLFsxMiwwXSxbLTEsLTFdLFsy
MCwyMV0sWzIwLDBdXX0sTjp7d2lkdGg6MjIscG9pbnRzOj0KW1s0LDIxXSxbNCwwXSxbLTEsLTFd
LFs0LDIxXSxbMTgsMF0sWy0xLC0xXSxbMTgsMjFdLFsxOCwwXV19LE86e3dpZHRoOjIyLHBvPQpp
bnRzOltbOSwyMV0sWzcsMjBdLFs1LDE4XSxbNCwxNl0sWzMsMTNdLFszLDhdLFs0LDVdLFs1LDNd
LFs3LDFdLFs5LDBdLFsxMyw9CjBdLFsxNSwxXSxbMTcsM10sWzE4LDVdLFsxOSw4XSxbMTksMTNd
LFsxOCwxNl0sWzE3LDE4XSxbMTUsMjBdLFsxMywyMV0sWzksMj0KMV1dfSxQOnt3aWR0aDoyMSxw
b2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDIxXSxbMTMsMjFdLFsxNiwyMF0sWzE3LDE5
PQpdLFsxOCwxN10sWzE4LDE0XSxbMTcsMTJdLFsxNiwxMV0sWzEzLDEwXSxbNCwxMF1dfSxROnt3
aWR0aDoyMixwb2ludHM6W1s5LDI9CjFdLFs3LDIwXSxbNSwxOF0sWzQsMTZdLFszLDEzXSxbMyw4
XSxbNCw1XSxbNSwzXSxbNywxXSxbOSwwXSxbMTMsMF0sWzE1LDFdLD0KWzE3LDNdLFsxOCw1XSxb
MTksOF0sWzE5LDEzXSxbMTgsMTZdLFsxNywxOF0sWzE1LDIwXSxbMTMsMjFdLFs5LDIxXSxbLTEs
LTFdPQosWzEyLDRdLFsxOCwtMl1dfSxSOnt3aWR0aDoyMSxwb2ludHM6W1s0LDIxXSxbNCwwXSxb
LTEsLTFdLFs0LDIxXSxbMTMsMjFdLFs9CjE2LDIwXSxbMTcsMTldLFsxOCwxN10sWzE4LDE1XSxb
MTcsMTNdLFsxNiwxMl0sWzEzLDExXSxbNCwxMV0sWy0xLC0xXSxbMTEsMT0KMV0sWzE4LDBdXX0s
Uzp7d2lkdGg6MjAscG9pbnRzOltbMTcsMThdLFsxNSwyMF0sWzEyLDIxXSxbOCwyMV0sWzUsMjBd
LFszLDE4PQpdLFszLDE2XSxbNCwxNF0sWzUsMTNdLFs3LDEyXSxbMTMsMTBdLFsxNSw5XSxbMTYs
OF0sWzE3LDZdLFsxNywzXSxbMTUsMV0sWzE9CjIsMF0sWzgsMF0sWzUsMV0sWzMsM11dfSxUOnt3
aWR0aDoxNixwb2ludHM6W1s4LDIxXSxbOCwwXSxbLTEsLTFdLFsxLDIxXSxbMT0KNSwyMV1dfSxV
Ont3aWR0aDoyMixwb2ludHM6W1s0LDIxXSxbNCw2XSxbNSwzXSxbNywxXSxbMTAsMF0sWzEyLDBd
LFsxNSwxXSxbPQoxNywzXSxbMTgsNl0sWzE4LDIxXV19LFY6e3dpZHRoOjE4LHBvaW50czpbWzEs
MjFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSw9CjBdXX0sVzp7d2lkdGg6MjQscG9pbnRzOltb
MiwyMV0sWzcsMF0sWy0xLC0xXSxbMTIsMjFdLFs3LDBdLFstMSwtMV0sWzEyLDIxXT0KLFsxNyww
XSxbLTEsLTFdLFsyMiwyMV0sWzE3LDBdXX0sWDp7d2lkdGg6MjAscG9pbnRzOltbMywyMV0sWzE3
LDBdLFstMSwtMV0sPQpbMTcsMjFdLFszLDBdXX0sWTp7d2lkdGg6MTgscG9pbnRzOltbMSwyMV0s
WzksMTFdLFs5LDBdLFstMSwtMV0sWzE3LDIxXSxbOSw9CjExXV19LFo6e3dpZHRoOjIwLHBvaW50
czpbWzE3LDIxXSxbMywwXSxbLTEsLTFdLFszLDIxXSxbMTcsMjFdLFstMSwtMV0sWzMsMD0KXSxb
MTcsMF1dfSwiWyI6e3dpZHRoOjE0LHBvaW50czpbWzQsMjVdLFs0LC03XSxbLTEsLTFdLFs1LDI1
XSxbNSwtN10sWy0xLC0xPQpdLFs0LDI1XSxbMTEsMjVdLFstMSwtMV0sWzQsLTddLFsxMSwtN11d
fSwiXFwiOnt3aWR0aDoxNCxwb2ludHM6W1swLDIxXSxbMTQ9CiwtM11dfSwiXSI6e3dpZHRoOjE0
LHBvaW50czpbWzksMjVdLFs5LC03XSxbLTEsLTFdLFsxMCwyNV0sWzEwLC03XSxbLTEsLTFdLD0K
WzMsMjVdLFsxMCwyNV0sWy0xLC0xXSxbMywtN10sWzEwLC03XV19LCJeIjp7d2lkdGg6MTYscG9p
bnRzOltbNiwxNV0sWzgsMThdPQosWzEwLDE1XSxbLTEsLTFdLFszLDEyXSxbOCwxN10sWzEzLDEy
XSxbLTEsLTFdLFs4LDE3XSxbOCwwXV19LF86e3dpZHRoOjE2LHA9Cm9pbnRzOltbMCwtMl0sWzE2
LC0yXV19LCJgIjp7d2lkdGg6MTAscG9pbnRzOltbNiwyMV0sWzUsMjBdLFs0LDE4XSxbNCwxNl0s
Wz0KNSwxNV0sWzYsMTZdLFs1LDE3XV19LGE6e3dpZHRoOjE5LHBvaW50czpbWzE1LDE0XSxbMTUs
MF0sWy0xLC0xXSxbMTUsMTFdLFsxPQozLDEzXSxbMTEsMTRdLFs4LDE0XSxbNiwxM10sWzQsMTFd
LFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBdLFsxMSwwXSxbMTM9CiwxXSxbMTUsM11dfSxi
Ont3aWR0aDoxOSxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs0LDExXSxbNiwxM10sWzgs
MTRdLD0KWzExLDE0XSxbMTMsMTNdLFsxNSwxMV0sWzE2LDhdLFsxNiw2XSxbMTUsM10sWzEzLDFd
LFsxMSwwXSxbOCwwXSxbNiwxXSxbNCwzPQpdXX0sYzp7d2lkdGg6MTgscG9pbnRzOltbMTUsMTFd
LFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSw9ClszLDZdLFs0LDNd
LFs2LDFdLFs4LDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0sZDp7d2lkdGg6MTkscG9pbnRzOltb
MTUsMjFdLD0KWzE1LDBdLFstMSwtMV0sWzE1LDExXSxbMTMsMTNdLFsxMSwxNF0sWzgsMTRdLFs2
LDEzXSxbNCwxMV0sWzMsOF0sWzMsNl0sWzQsPQozXSxbNiwxXSxbOCwwXSxbMTEsMF0sWzEzLDFd
LFsxNSwzXV19LGU6e3dpZHRoOjE4LHBvaW50czpbWzMsOF0sWzE1LDhdLFsxNSw9CjEwXSxbMTQs
MTJdLFsxMywxM10sWzExLDE0XSxbOCwxNF0sWzYsMTNdLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwz
XSxbNiwxXSxbOD0KLDBdLFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0sZjp7d2lkdGg6MTIscG9pbnRz
OltbMTAsMjFdLFs4LDIxXSxbNiwyMF0sWzUsMTddPQosWzUsMF0sWy0xLC0xXSxbMiwxNF0sWzks
MTRdXX0sZzp7d2lkdGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtMl0sWzE0LC01XSw9ClsxMywt
Nl0sWzExLC03XSxbOCwtN10sWzYsLTZdLFstMSwtMV0sWzE1LDExXSxbMTMsMTNdLFsxMSwxNF0s
WzgsMTRdLFs2LDEzXT0KLFs0LDExXSxbMyw4XSxbMyw2XSxbNCwzXSxbNiwxXSxbOCwwXSxbMTEs
MF0sWzEzLDFdLFsxNSwzXV19LGg6e3dpZHRoOjE5LHBvPQppbnRzOltbNCwyMV0sWzQsMF0sWy0x
LC0xXSxbNCwxMF0sWzcsMTNdLFs5LDE0XSxbMTIsMTRdLFsxNCwxM10sWzE1LDEwXSxbMTU9Ciww
XV19LGk6e3dpZHRoOjgscG9pbnRzOltbMywyMV0sWzQsMjBdLFs1LDIxXSxbNCwyMl0sWzMsMjFd
LFstMSwtMV0sWzQsMTRdLD0KWzQsMF1dfSxqOnt3aWR0aDoxMCxwb2ludHM6W1s1LDIxXSxbNiwy
MF0sWzcsMjFdLFs2LDIyXSxbNSwyMV0sWy0xLC0xXSxbNiwxPQo0XSxbNiwtM10sWzUsLTZdLFsz
LC03XSxbMSwtN11dfSxrOnt3aWR0aDoxNyxwb2ludHM6W1s0LDIxXSxbNCwwXSxbLTEsLTFdLFs9
CjE0LDE0XSxbNCw0XSxbLTEsLTFdLFs4LDhdLFsxNSwwXV19LGw6e3dpZHRoOjgscG9pbnRzOltb
NCwyMV0sWzQsMF1dfSxtOnt3aT0KZHRoOjMwLHBvaW50czpbWzQsMTRdLFs0LDBdLFstMSwtMV0s
WzQsMTBdLFs3LDEzXSxbOSwxNF0sWzEyLDE0XSxbMTQsMTNdLFsxPQo1LDEwXSxbMTUsMF0sWy0x
LC0xXSxbMTUsMTBdLFsxOCwxM10sWzIwLDE0XSxbMjMsMTRdLFsyNSwxM10sWzI2LDEwXSxbMjYs
MF09Cl19LG46e3dpZHRoOjE5LHBvaW50czpbWzQsMTRdLFs0LDBdLFstMSwtMV0sWzQsMTBdLFs3
LDEzXSxbOSwxNF0sWzEyLDE0XSxbMT0KNCwxM10sWzE1LDEwXSxbMTUsMF1dfSxvOnt3aWR0aDox
OSxwb2ludHM6W1s4LDE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdPQosWzQsM10sWzYsMV0s
WzgsMF0sWzExLDBdLFsxMywxXSxbMTUsM10sWzE2LDZdLFsxNiw4XSxbMTUsMTFdLFsxMywxM10s
WzExLDE9CjRdLFs4LDE0XV19LHA6e3dpZHRoOjE5LHBvaW50czpbWzQsMTRdLFs0LC03XSxbLTEs
LTFdLFs0LDExXSxbNiwxM10sWzgsMTRdLD0KWzExLDE0XSxbMTMsMTNdLFsxNSwxMV0sWzE2LDhd
LFsxNiw2XSxbMTUsM10sWzEzLDFdLFsxMSwwXSxbOCwwXSxbNiwxXSxbNCwzPQpdXX0scTp7d2lk
dGg6MTkscG9pbnRzOltbMTUsMTRdLFsxNSwtN10sWy0xLC0xXSxbMTUsMTFdLFsxMywxM10sWzEx
LDE0XSxbOCw9CjE0XSxbNiwxM10sWzQsMTFdLFszLDhdLFszLDZdLFs0LDNdLFs2LDFdLFs4LDBd
LFsxMSwwXSxbMTMsMV0sWzE1LDNdXX0scjp7dz0KaWR0aDoxMyxwb2ludHM6W1s0LDE0XSxbNCww
XSxbLTEsLTFdLFs0LDhdLFs1LDExXSxbNywxM10sWzksMTRdLFsxMiwxNF1dfSxzPQo6e3dpZHRo
OjE3LHBvaW50czpbWzE0LDExXSxbMTMsMTNdLFsxMCwxNF0sWzcsMTRdLFs0LDEzXSxbMywxMV0s
WzQsOV0sWzYsOF09CixbMTEsN10sWzEzLDZdLFsxNCw0XSxbMTQsM10sWzEzLDFdLFsxMCwwXSxb
NywwXSxbNCwxXSxbMywzXV19LHQ6e3dpZHRoOjEyLD0KcG9pbnRzOltbNSwyMV0sWzUsNF0sWzYs
MV0sWzgsMF0sWzEwLDBdLFstMSwtMV0sWzIsMTRdLFs5LDE0XV19LHU6e3dpZHRoOjE5PQoscG9p
bnRzOltbNCwxNF0sWzQsNF0sWzUsMV0sWzcsMF0sWzEwLDBdLFsxMiwxXSxbMTUsNF0sWy0xLC0x
XSxbMTUsMTRdLFsxNSw9CjBdXX0sdjp7d2lkdGg6MTYscG9pbnRzOltbMiwxNF0sWzgsMF0sWy0x
LC0xXSxbMTQsMTRdLFs4LDBdXX0sdzp7d2lkdGg6MjIscD0Kb2ludHM6W1szLDE0XSxbNywwXSxb
LTEsLTFdLFsxMSwxNF0sWzcsMF0sWy0xLC0xXSxbMTEsMTRdLFsxNSwwXSxbLTEsLTFdLFsxPQo5
LDE0XSxbMTUsMF1dfSx4Ont3aWR0aDoxNyxwb2ludHM6W1szLDE0XSxbMTQsMF0sWy0xLC0xXSxb
MTQsMTRdLFszLDBdXX0seTo9Cnt3aWR0aDoxNixwb2ludHM6W1syLDE0XSxbOCwwXSxbLTEsLTFd
LFsxNCwxNF0sWzgsMF0sWzYsLTRdLFs0LC02XSxbMiwtN10sWz0KMSwtN11dfSx6Ont3aWR0aDox
Nyxwb2ludHM6W1sxNCwxNF0sWzMsMF0sWy0xLC0xXSxbMywxNF0sWzE0LDE0XSxbLTEsLTFdLFsz
PQosMF0sWzE0LDBdXX0sInsiOnt3aWR0aDoxNCxwb2ludHM6W1s5LDI1XSxbNywyNF0sWzYsMjNd
LFs1LDIxXSxbNSwxOV0sWzYsMTc9Cl0sWzcsMTZdLFs4LDE0XSxbOCwxMl0sWzYsMTBdLFstMSwt
MV0sWzcsMjRdLFs2LDIyXSxbNiwyMF0sWzcsMThdLFs4LDE3XSxbOT0KLDE1XSxbOSwxM10sWzgs
MTFdLFs0LDldLFs4LDddLFs5LDVdLFs5LDNdLFs4LDFdLFs3LDBdLFs2LC0yXSxbNiwtNF0sWzcs
LTZdPQosWy0xLC0xXSxbNiw4XSxbOCw2XSxbOCw0XSxbNywyXSxbNiwxXSxbNSwtMV0sWzUsLTNd
LFs2LC01XSxbNywtNl0sWzksLTddXX09CiwifCI6e3dpZHRoOjgscG9pbnRzOltbNCwyNV0sWzQs
LTddXX0sIn0iOnt3aWR0aDoxNCxwb2ludHM6W1s1LDI1XSxbNywyNF0sWz0KOCwyM10sWzksMjFd
LFs5LDE5XSxbOCwxN10sWzcsMTZdLFs2LDE0XSxbNiwxMl0sWzgsMTBdLFstMSwtMV0sWzcsMjRd
LFs4LDIyPQpdLFs4LDIwXSxbNywxOF0sWzYsMTddLFs1LDE1XSxbNSwxM10sWzYsMTFdLFsxMCw5
XSxbNiw3XSxbNSw1XSxbNSwzXSxbNiwxXSw9Cls3LDBdLFs4LC0yXSxbOCwtNF0sWzcsLTZdLFst
MSwtMV0sWzgsOF0sWzYsNl0sWzYsNF0sWzcsMl0sWzgsMV0sWzksLTFdLFs5LD0KLTNdLFs4LC01
XSxbNywtNl0sWzUsLTddXX0sIn4iOnt3aWR0aDoyNCxwb2ludHM6W1szLDZdLFszLDhdLFs0LDEx
XSxbNiwxMl0sPQpbOCwxMl0sWzEwLDExXSxbMTQsOF0sWzE2LDddLFsxOCw3XSxbMjAsOF0sWzIx
LDEwXSxbLTEsLTFdLFszLDhdLFs0LDEwXSxbNiw9CjExXSxbOCwxMV0sWzEwLDEwXSxbMTQsN10s
WzE2LDZdLFsxOCw2XSxbMjAsN10sWzIxLDEwXSxbMjEsMTJdXX19O2EuanFwbG90Lj0KQ2FudmFz
Rm9udFJlbmRlcmVyPTNEZnVuY3Rpb24oYil7Yj0zRGJ8fHt9O2lmKCFiLnB0MnB4KXtiLnB0MnB4
PTNEMS41fWEuanFwPQpsb3QuQ2FudmFzVGV4dFJlbmRlcmVyLmNhbGwodGhpcyxiKX07YS5qcXBs
b3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwZT0KPTNEbmV3IGEuanFwbG90LkNhbnZhc1Rl
eHRSZW5kZXJlcih7fSk7YS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyLnByb3RvdHlwPQplLmNv
bnN0cnVjdG9yPTNEYS5qcXBsb3QuQ2FudmFzRm9udFJlbmRlcmVyO2EuanFwbG90LkNhbnZhc0Zv
bnRSZW5kZXJlci5wcm89CnRvdHlwZS5tZWFzdXJlPTNEZnVuY3Rpb24oYyxlKXt2YXIgZD0zRHRo
aXMuZm9udFNpemUrIiAiK3RoaXMuZm9udEZhbWlseTtjLj0Kc2F2ZSgpO2MuZm9udD0zRGQ7dmFy
IGI9M0RjLm1lYXN1cmVUZXh0KGUpLndpZHRoO2MucmVzdG9yZSgpO3JldHVybiBifTthLmpxPQpw
bG90LkNhbnZhc0ZvbnRSZW5kZXJlci5wcm90b3R5cGUuZHJhdz0zRGZ1bmN0aW9uKGUsZyl7dmFy
IGM9M0QwO3ZhciBoPTNEdGg9CmlzLmhlaWdodCowLjcyO2Uuc2F2ZSgpO3ZhciBkLGI7aWYoKC1N
YXRoLlBJLzI8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9Cj0zRDApfHwoTWF0aC5QSSozLzI8
PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjIpKXtkPTNEMDtiPTNELU1hdD0K
aC5zaW4odGhpcy5hbmdsZSkqdGhpcy53aWR0aH1lbHNle2lmKCgwPHRoaXMuYW5nbGUmJnRoaXMu
YW5nbGU8PTNETWF0aC5QSS8yPQopfHwoLU1hdGguUEkqMjw9M0R0aGlzLmFuZ2xlJiZ0aGlzLmFu
Z2xlPD0zRC1NYXRoLlBJKjMvMikpe2Q9M0RNYXRoLnNpbih0aGk9CnMuYW5nbGUpKnRoaXMuaGVp
Z2h0O2I9M0QwfWVsc2V7aWYoKC1NYXRoLlBJPHRoaXMuYW5nbGUmJnRoaXMuYW5nbGU8LU1hdGgu
UD0KSS8yKXx8KE1hdGguUEk8PTNEdGhpcy5hbmdsZSYmdGhpcy5hbmdsZTw9M0RNYXRoLlBJKjMv
Mikpe2Q9M0QtTWF0aC5jb3ModGhpPQpzLmFuZ2xlKSp0aGlzLndpZHRoO2I9M0QtTWF0aC5zaW4o
dGhpcy5hbmdsZSkqdGhpcy53aWR0aC1NYXRoLmNvcyh0aGlzLmFuZ2w9CmUpKnRoaXMuaGVpZ2h0
fWVsc2V7aWYoKC1NYXRoLlBJKjMvMjx0aGlzLmFuZ2xlJiZ0aGlzLmFuZ2xlPE1hdGguUEkpfHwo
TWF0aD0KLlBJLzI8dGhpcy5hbmdsZSYmdGhpcy5hbmdsZTxNYXRoLlBJKSl7ZD0zRE1hdGguc2lu
KHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0PQotTWF0aC5jb3ModGhpcy5hbmdsZSkqdGhpcy53aWR0
aDtiPTNELU1hdGguY29zKHRoaXMuYW5nbGUpKnRoaXMuaGVpZ2h0fX19fWU9Ci5zdHJva2VTdHls
ZT0zRHRoaXMuZmlsbFN0eWxlO2UuZmlsbFN0eWxlPTNEdGhpcy5maWxsU3R5bGU7dmFyIGY9M0R0
aGlzLmZvbj0KdFNpemUrIiAiK3RoaXMuZm9udEZhbWlseTtlLmZvbnQ9M0RmO2UudHJhbnNsYXRl
KGQsYik7ZS5yb3RhdGUodGhpcy5hbmdsZSk7PQplLmZpbGxUZXh0KGcsYyxoKTtlLnJlc3RvcmUo
KX19KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgZGI5MmY2
ZTE5YjM4MTgwOTdiZDNkNWExNDlhY2Y4MGNlZDkwNjc1YyAtciBhMGQxYTkxZTA1YmVlMzJkZDVm
MmZhYz0KOTNkODBmYmU5MzViYThjMjggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hh
cnRzL3N0YXRpYy9wbHVnaW5zL2pxcGxvPQp0L3BsdWdpbnMvanFwbG90LmNhdGVnb3J5QXhpc1Jl
bmRlcmVyLm1pbi5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBsb3QvcGx1Z2lucy9qcT0KcGxvdC5jYXRl
Z29yeUF4aXNSZW5kZXJlci5taW4uanMKQEAgLTAsMCArMSwzIEBACisvKiBqcVBsb3QgMS4wLjhy
MTI1MCB8IChjKSAyMDA5LTIwMTMgQ2hyaXMgTGVvbmVsbG8gfCBqcGxvdC5jb20KKyAgIGpzRGF0
ZSB8IChjKSAyMDEwLTIwMTMgQ2hyaXMgTGVvbmVsbG8KKyAqLyhmdW5jdGlvbihhKXthLmpxcGxv
dC5DYXRlZ29yeUF4aXNSZW5kZXJlcj0zRGZ1bmN0aW9uKGIpe2EuanFwbG90LkxpbmVhPQpyQXhp
c1JlbmRlcmVyLmNhbGwodGhpcyk7dGhpcy5zb3J0TWVyZ2VkTGFiZWxzPTNEZmFsc2V9O2EuanFw
bG90LkNhdGVnb3J5QXg9CmlzUmVuZGVyZXIucHJvdG90eXBlPTNEbmV3IGEuanFwbG90LkxpbmVh
ckF4aXNSZW5kZXJlcigpO2EuanFwbG90LkNhdGVnb3J5QT0KeGlzUmVuZGVyZXIucHJvdG90eXBl
LmNvbnN0cnVjdG9yPTNEYS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXI7YS5qcXBsb3QuPQpD
YXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5cGUuaW5pdD0zRGZ1bmN0aW9uKGUpe3RoaXMuZ3Jv
dXBzPTNEMTt0aGlzLmdyb3U9CnBMYWJlbHM9M0RbXTt0aGlzLl9ncm91cExhYmVscz0zRFtdO3Ro
aXMuX2dyb3VwZWQ9M0RmYWxzZTt0aGlzLl9iYXJzUGVyR3JvdT0KcD0zRG51bGw7dGhpcy5yZXZl
cnNlPTNEZmFsc2U7YS5leHRlbmQodHJ1ZSx0aGlzLHt0aWNrT3B0aW9uczp7Zm9ybWF0U3RyaW5n
PQo6IiVkIn19LGUpO3ZhciBiPTNEdGhpcy5fZGF0YUJvdW5kcztmb3IodmFyIGY9M0QwO2Y8dGhp
cy5fc2VyaWVzLmxlbmd0aDtmKys9Cil7dmFyIGc9M0R0aGlzLl9zZXJpZXNbZl07aWYoZy5ncm91
cHMpe3RoaXMuZ3JvdXBzPTNEZy5ncm91cHN9dmFyIGg9M0RnLmRhdD0KYTtmb3IodmFyIGM9M0Qw
O2M8aC5sZW5ndGg7YysrKXtpZih0aGlzLm5hbWU9M0Q9M0QieGF4aXMifHx0aGlzLm5hbWU9M0Q9
M0QiPQp4MmF4aXMiKXtpZihoW2NdWzBdPGIubWlufHxiLm1pbj0zRD0zRG51bGwpe2IubWluPTNE
aFtjXVswXX1pZihoW2NdWzBdPmIubWE9Cnh8fGIubWF4PTNEPTNEbnVsbCl7Yi5tYXg9M0RoW2Nd
WzBdfX1lbHNle2lmKGhbY11bMV08Yi5taW58fGIubWluPTNEPTNEbnVsbD0KKXtiLm1pbj0zRGhb
Y11bMV19aWYoaFtjXVsxXT5iLm1heHx8Yi5tYXg9M0Q9M0RudWxsKXtiLm1heD0zRGhbY11bMV19
fX19aWYoPQp0aGlzLmdyb3VwTGFiZWxzLmxlbmd0aCl7dGhpcy5ncm91cHM9M0R0aGlzLmdyb3Vw
TGFiZWxzLmxlbmd0aH19O2EuanFwbG90LkM9CmF0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBl
LmNyZWF0ZVRpY2tzPTNEZnVuY3Rpb24oKXt2YXIgRD0zRHRoaXMuX3RpY2tzOz0KdmFyIHo9M0R0
aGlzLnRpY2tzO3ZhciBGPTNEdGhpcy5uYW1lO3ZhciBDPTNEdGhpcy5fZGF0YUJvdW5kczt2YXIg
dixBO3ZhciBxPQosdzt2YXIgZCxjO3ZhciBiLHg7aWYoei5sZW5ndGgpe2lmKHRoaXMuZ3JvdXBz
PjEmJiF0aGlzLl9ncm91cGVkKXt2YXIgcj0zRHo9Ci5sZW5ndGg7dmFyIHA9M0RwYXJzZUludChy
L3RoaXMuZ3JvdXBzLDEwKTt2YXIgZT0zRDA7Zm9yKHZhciB4PTNEcDt4PHI7eCs9Cj0zRHApe3ou
c3BsaWNlKHgrZSwwLCIgIik7ZSsrfXRoaXMuX2dyb3VwZWQ9M0R0cnVlfXRoaXMubWluPTNEMC41
O3RoaXMubWF4PQo9M0R6Lmxlbmd0aCswLjU7dmFyIG09M0R0aGlzLm1heC10aGlzLm1pbjt0aGlz
Lm51bWJlclRpY2tzPTNEMip6Lmxlbmd0aCsxO2Y9Cm9yKHg9M0QwO3g8ei5sZW5ndGg7eCsrKXti
PTNEdGhpcy5taW4rMip4Km0vKHRoaXMubnVtYmVyVGlja3MtMSk7dmFyIGg9M0RuZT0KdyB0aGlz
LnRpY2tSZW5kZXJlcih0aGlzLnRpY2tPcHRpb25zKTtoLnNob3dMYWJlbD0zRGZhbHNlO2guc2V0
VGljayhiLHRoaXMuPQpuYW1lKTt0aGlzLl90aWNrcy5wdXNoKGgpO3ZhciBoPTNEbmV3IHRoaXMu
dGlja1JlbmRlcmVyKHRoaXMudGlja09wdGlvbnMpO2g9Ci5sYWJlbD0zRHpbeF07aC5zaG93TWFy
az0zRGZhbHNlO2guc2hvd0dyaWRsaW5lPTNEZmFsc2U7aC5zZXRUaWNrKGIrMC41LHRoaT0Kcy5u
YW1lKTt0aGlzLl90aWNrcy5wdXNoKGgpfXZhciBoPTNEbmV3IHRoaXMudGlja1JlbmRlcmVyKHRo
aXMudGlja09wdGlvbnMpPQo7aC5zaG93TGFiZWw9M0RmYWxzZTtoLnNldFRpY2soYisxLHRoaXMu
bmFtZSk7dGhpcy5fdGlja3MucHVzaChoKX1lbHNle2lmKEY9Cj0zRD0zRCJ4YXhpcyJ8fEY9M0Q9
M0QieDJheGlzIil7dj0zRHRoaXMuX3Bsb3REaW1lbnNpb25zLndpZHRofWVsc2V7dj0zRHRoaT0K
cy5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0fWlmKHRoaXMubWluIT0zRG51bGwmJnRoaXMubWF4IT0z
RG51bGwmJnRoaXMubnVtYmVyPQpUaWNrcyE9M0RudWxsKXt0aGlzLnRpY2tJbnRlcnZhbD0zRG51
bGx9aWYodGhpcy5taW4hPTNEbnVsbCYmdGhpcy5tYXghPTNEbnU9CmxsJiZ0aGlzLnRpY2tJbnRl
cnZhbCE9M0RudWxsKXtpZihwYXJzZUludCgodGhpcy5tYXgtdGhpcy5taW4pL3RoaXMudGlja0lu
dD0KZXJ2YWwsMTApIT0zRCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWwpe3Ro
aXMudGlja0ludGVydmFsPTNEbnVsPQpsfX12YXIgeT0zRFtdO3ZhciBCPTNEMDt2YXIgcT0zRDAu
NTt2YXIgdyxFO3ZhciBmPTNEZmFsc2U7Zm9yKHZhciB4PTNEMDt4PHQ9Cmhpcy5fc2VyaWVzLmxl
bmd0aDt4Kyspe3ZhciBrPTNEdGhpcy5fc2VyaWVzW3hdO2Zvcih2YXIgdT0zRDA7dTxrLmRhdGEu
bGVuZz0KdGg7dSsrKXtpZih0aGlzLm5hbWU9M0Q9M0QieGF4aXMifHx0aGlzLm5hbWU9M0Q9M0Qi
eDJheGlzIil7RT0zRGsuZGF0YVt1XVswPQpdfWVsc2V7RT0zRGsuZGF0YVt1XVsxXX1pZihhLmlu
QXJyYXkoRSx5KT0zRD0zRC0xKXtmPTNEdHJ1ZTtCKz0zRDE7eS5wdXNoKEU9Cil9fX1pZihmJiZ0
aGlzLnNvcnRNZXJnZWRMYWJlbHMpe2lmKHR5cGVvZiB5WzBdPTNEPTNEInN0cmluZyIpe3kuc29y
dCgpfWVscz0KZXt5LnNvcnQoZnVuY3Rpb24oaixpKXtyZXR1cm4gai1pfSl9fXRoaXMudGlja3M9
M0R5O2Zvcih2YXIgeD0zRDA7eDx0aGlzLl9zPQplcmllcy5sZW5ndGg7eCsrKXt2YXIgaz0zRHRo
aXMuX3Nlcmllc1t4XTtmb3IodmFyIHU9M0QwO3U8ay5kYXRhLmxlbmd0aDt1Kys9Cil7aWYodGhp
cy5uYW1lPTNEPTNEInhheGlzInx8dGhpcy5uYW1lPTNEPTNEIngyYXhpcyIpe0U9M0RrLmRhdGFb
dV1bMF19ZWxzZT0Ke0U9M0RrLmRhdGFbdV1bMV19dmFyIG49M0RhLmluQXJyYXkoRSx5KSsxO2lm
KHRoaXMubmFtZT0zRD0zRCJ4YXhpcyJ8fHRoaXMuPQpuYW1lPTNEPTNEIngyYXhpcyIpe2suZGF0
YVt1XVswXT0zRG59ZWxzZXtrLmRhdGFbdV1bMV09M0RufX19aWYodGhpcy5ncm91cHM9Cj4xJiYh
dGhpcy5fZ3JvdXBlZCl7dmFyIHI9M0R5Lmxlbmd0aDt2YXIgcD0zRHBhcnNlSW50KHIvdGhpcy5n
cm91cHMsMTApO3Zhcj0KIGU9M0QwO2Zvcih2YXIgeD0zRHA7eDxyO3grPTNEcCsxKXt5W3hdPTNE
IiAifXRoaXMuX2dyb3VwZWQ9M0R0cnVlfXc9M0RCKzAuPQo1O2lmKHRoaXMubnVtYmVyVGlja3M9
M0Q9M0RudWxsKXt0aGlzLm51bWJlclRpY2tzPTNEMipCKzF9dmFyIG09M0R3LXE7dGhpcy49Cm1p
bj0zRHE7dGhpcy5tYXg9M0R3O3ZhciBvPTNEMDt2YXIgZz0zRHBhcnNlSW50KDMrdi8xMCwxMCk7
dmFyIHA9M0RwYXJzZUludD0KKEIvZywxMCk7aWYodGhpcy50aWNrSW50ZXJ2YWw9M0Q9M0RudWxs
KXt0aGlzLnRpY2tJbnRlcnZhbD0zRG0vKHRoaXMubnVtYmVyPQpUaWNrcy0xKX1mb3IodmFyIHg9
M0QwO3g8dGhpcy5udW1iZXJUaWNrczt4Kyspe2I9M0R0aGlzLm1pbit4KnRoaXMudGlja0ludGU9
CnJ2YWw7dmFyIGg9M0RuZXcgdGhpcy50aWNrUmVuZGVyZXIodGhpcy50aWNrT3B0aW9ucyk7aWYo
eC8yPTNEPTNEcGFyc2VJbnQoeD0KLzIsMTApKXtoLnNob3dMYWJlbD0zRGZhbHNlO2guc2hvd01h
cms9M0R0cnVlfWVsc2V7aWYocD4wJiZvPHApe2guc2hvd0xhYmVsPQo9M0RmYWxzZTtvKz0zRDF9
ZWxzZXtoLnNob3dMYWJlbD0zRHRydWU7bz0zRDB9aC5sYWJlbD0zRGguZm9ybWF0dGVyKGguZm9y
bWE9CnRTdHJpbmcseVsoeC0xKS8yXSk7aC5zaG93TWFyaz0zRGZhbHNlO2guc2hvd0dyaWRsaW5l
PTNEZmFsc2V9aC5zZXRUaWNrKGIsdD0KaGlzLm5hbWUpO3RoaXMuX3RpY2tzLnB1c2goaCl9fX07
YS5qcXBsb3QuQ2F0ZWdvcnlBeGlzUmVuZGVyZXIucHJvdG90eXBlLmRyPQphdz0zRGZ1bmN0aW9u
KGIsail7aWYodGhpcy5zaG93KXt0aGlzLnJlbmRlcmVyLmNyZWF0ZVRpY2tzLmNhbGwodGhpcyk7
dmFyIGg9Cj0zRDA7dmFyIGM7aWYodGhpcy5fZWxlbSl7dGhpcy5fZWxlbS5lbXB0eUZvcmNlKCl9
dGhpcy5fZWxlbT0zRHRoaXMuX2VsZW18fD0KYSgnPGRpdiBjbGFzcz0zRCJqcXBsb3QtYXhpcyBq
cXBsb3QtJyt0aGlzLm5hbWUrJyIgc3R5bGU9M0QicG9zaXRpb246YWJzb2x1PQp0ZTsiPjwvZGl2
PicpO2lmKHRoaXMubmFtZT0zRD0zRCJ4YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4aXMiKXt0
aGlzLl9lbGU9Cm0ud2lkdGgodGhpcy5fcGxvdERpbWVuc2lvbnMud2lkdGgpfWVsc2V7dGhpcy5f
ZWxlbS5oZWlnaHQodGhpcy5fcGxvdERpbWVucz0KaW9ucy5oZWlnaHQpfXRoaXMubGFiZWxPcHRp
b25zLmF4aXM9M0R0aGlzLm5hbWU7dGhpcy5fbGFiZWw9M0RuZXcgdGhpcy5sYWJlPQpsUmVuZGVy
ZXIodGhpcy5sYWJlbE9wdGlvbnMpO2lmKHRoaXMuX2xhYmVsLnNob3cpe3ZhciBnPTNEdGhpcy5f
bGFiZWwuZHJhdyg9CmIsaik7Zy5hcHBlbmRUbyh0aGlzLl9lbGVtKX12YXIgZj0zRHRoaXMuX3Rp
Y2tzO2Zvcih2YXIgZT0zRDA7ZTxmLmxlbmd0aDtlKz0KKyl7dmFyIGQ9M0RmW2VdO2lmKGQuc2hv
d0xhYmVsJiYoIWQuaXNNaW5vclRpY2t8fHRoaXMuc2hvd01pbm9yVGlja3MpKXt2YXIgPQpnPTNE
ZC5kcmF3KGIsaik7Zy5hcHBlbmRUbyh0aGlzLl9lbGVtKX19dGhpcy5fZ3JvdXBMYWJlbHM9M0Rb
XTtmb3IodmFyIGU9M0Q9CjA7ZTx0aGlzLmdyb3VwTGFiZWxzLmxlbmd0aDtlKyspe3ZhciBnPTNE
YSgnPGRpdiBzdHlsZT0zRCJwb3NpdGlvbjphYnNvbHV0ZT0KOyIgY2xhc3M9M0QianFwbG90LScr
dGhpcy5uYW1lKyctZ3JvdXBMYWJlbCI+PC9kaXY+Jyk7Zy5odG1sKHRoaXMuZ3JvdXBMYWJlPQps
c1tlXSk7dGhpcy5fZ3JvdXBMYWJlbHMucHVzaChnKTtnLmFwcGVuZFRvKHRoaXMuX2VsZW0pfX1y
ZXR1cm4gdGhpcy5fZWxlbX09CjthLmpxcGxvdC5DYXRlZ29yeUF4aXNSZW5kZXJlci5wcm90b3R5
cGUuc2V0PTNEZnVuY3Rpb24oKXt2YXIgZT0zRDA7dmFyIG07dj0KYXIgaz0zRDA7dmFyIGY9M0Qw
O3ZhciBkPTNEKHRoaXMuX2xhYmVsPTNEPTNEbnVsbCk/ZmFsc2U6dGhpcy5fbGFiZWwuc2hvdztp
PQpmKHRoaXMuc2hvdyl7dmFyIG49M0R0aGlzLl90aWNrcztmb3IodmFyIGM9M0QwO2M8bi5sZW5n
dGg7YysrKXt2YXIgZz0zRG5bY109CjtpZihnLnNob3dMYWJlbCYmKCFnLmlzTWlub3JUaWNrfHx0
aGlzLnNob3dNaW5vclRpY2tzKSl7aWYodGhpcy5uYW1lPTNEPTNEIj0KeGF4aXMifHx0aGlzLm5h
bWU9M0Q9M0QieDJheGlzIil7bT0zRGcuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSl9ZWxzZXttPTNE
Zy5fPQplbGVtLm91dGVyV2lkdGgodHJ1ZSl9aWYobT5lKXtlPTNEbX19fXZhciBqPTNEMDtmb3Io
dmFyIGM9M0QwO2M8dGhpcy5fZ3JvdXA9CkxhYmVscy5sZW5ndGg7YysrKXt2YXIgYj0zRHRoaXMu
X2dyb3VwTGFiZWxzW2NdO2lmKHRoaXMubmFtZT0zRD0zRCJ4YXhpcyJ8fD0KdGhpcy5uYW1lPTNE
PTNEIngyYXhpcyIpe209M0RiLm91dGVySGVpZ2h0KHRydWUpfWVsc2V7bT0zRGIub3V0ZXJXaWR0
aCh0cnVlPQopfWlmKG0+ail7aj0zRG19fWlmKGQpe2s9M0R0aGlzLl9sYWJlbC5fZWxlbS5vdXRl
cldpZHRoKHRydWUpO2Y9M0R0aGlzLl9sYWI9CmVsLl9lbGVtLm91dGVySGVpZ2h0KHRydWUpfWlm
KHRoaXMubmFtZT0zRD0zRCJ4YXhpcyIpe2UrPTNEaitmO3RoaXMuX2VsZW0uYz0Kc3Moe2hlaWdo
dDplKyJweCIsbGVmdDoiMHB4Iixib3R0b206IjBweCJ9KX1lbHNle2lmKHRoaXMubmFtZT0zRD0z
RCJ4MmF4aXMiPQope2UrPTNEaitmO3RoaXMuX2VsZW0uY3NzKHtoZWlnaHQ6ZSsicHgiLGxlZnQ6
IjBweCIsdG9wOiIwcHgifSl9ZWxzZXtpZih0aGk9CnMubmFtZT0zRD0zRCJ5YXhpcyIpe2UrPTNE
aitrO3RoaXMuX2VsZW0uY3NzKHt3aWR0aDplKyJweCIsbGVmdDoiMHB4Iix0b3A6Ij0KMHB4In0p
O2lmKGQmJnRoaXMuX2xhYmVsLmNvbnN0cnVjdG9yPTNEPTNEYS5qcXBsb3QuQXhpc0xhYmVsUmVu
ZGVyZXIpe3RoaXMuPQpfbGFiZWwuX2VsZW0uY3NzKCJ3aWR0aCIsaysicHgiKX19ZWxzZXtlKz0z
RGorazt0aGlzLl9lbGVtLmNzcyh7d2lkdGg6ZSsicHg9CiIscmlnaHQ6IjBweCIsdG9wOiIwcHgi
fSk7aWYoZCYmdGhpcy5fbGFiZWwuY29uc3RydWN0b3I9M0Q9M0RhLmpxcGxvdC5BeGlzTD0KYWJl
bFJlbmRlcmVyKXt0aGlzLl9sYWJlbC5fZWxlbS5jc3MoIndpZHRoIixrKyJweCIpfX19fX19O2Eu
anFwbG90LkNhdGVnb3J5PQpBeGlzUmVuZGVyZXIucHJvdG90eXBlLnBhY2s9M0RmdW5jdGlvbihl
LGMpe3ZhciBDPTNEdGhpcy5fdGlja3M7dmFyIHY9M0R0aGk9CnMubWF4O3ZhciBzPTNEdGhpcy5t
aW47dmFyIG49M0RjLm1heDt2YXIgbD0zRGMubWluO3ZhciBxPTNEKHRoaXMuX2xhYmVsPTNEPQo9
M0RudWxsKT9mYWxzZTp0aGlzLl9sYWJlbC5zaG93O3ZhciB4O2Zvcih2YXIgciBpbiBlKXt0aGlz
Ll9lbGVtLmNzcyhyLGVbcl09Cil9dGhpcy5fb2Zmc2V0cz0zRGM7dmFyIGc9M0RuLWw7dmFyIGs9
M0R2LXM7aWYoIXRoaXMucmV2ZXJzZSl7dGhpcy51MnA9M0RmdT0KbmN0aW9uKGgpe3JldHVybiho
LXMpKmcvaytsfTt0aGlzLnAydT0zRGZ1bmN0aW9uKGgpe3JldHVybihoLWwpKmsvZytzfTtpZih0
PQpoaXMubmFtZT0zRD0zRCJ4YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4aXMiKXt0aGlzLnNl
cmllc191MnA9M0RmdW5jdGlvbig9Cmgpe3JldHVybihoLXMpKmcva307dGhpcy5zZXJpZXNfcDJ1
PTNEZnVuY3Rpb24oaCl7cmV0dXJuIGgqay9nK3N9fWVsc2V7dGhpcz0KLnNlcmllc191MnA9M0Rm
dW5jdGlvbihoKXtyZXR1cm4oaC12KSpnL2t9O3RoaXMuc2VyaWVzX3AydT0zRGZ1bmN0aW9uKGgp
e3JlPQp0dXJuIGgqay9nK3Z9fX1lbHNle3RoaXMudTJwPTNEZnVuY3Rpb24oaCl7cmV0dXJuIGwr
KHYtaCkqZy9rfTt0aGlzLnAydT0zRGY9CnVuY3Rpb24oaCl7cmV0dXJuIHMrKGgtbCkqay9nfTtp
Zih0aGlzLm5hbWU9M0Q9M0QieGF4aXMifHx0aGlzLm5hbWU9M0Q9M0QieD0KMmF4aXMiKXt0aGlz
LnNlcmllc191MnA9M0RmdW5jdGlvbihoKXtyZXR1cm4odi1oKSpnL2t9O3RoaXMuc2VyaWVzX3Ay
dT0zRGZ1PQpuY3Rpb24oaCl7cmV0dXJuIGgqay9nK3Z9fWVsc2V7dGhpcy5zZXJpZXNfdTJwPTNE
ZnVuY3Rpb24oaCl7cmV0dXJuKHMtaCkqZy89Cmt9O3RoaXMuc2VyaWVzX3AydT0zRGZ1bmN0aW9u
KGgpe3JldHVybiBoKmsvZytzfX19aWYodGhpcy5zaG93KXtpZih0aGlzLm5hbT0KZT0zRD0zRCJ4
YXhpcyJ8fHRoaXMubmFtZT0zRD0zRCJ4MmF4aXMiKXtmb3IoeD0zRDA7eDxDLmxlbmd0aDt4Kysp
e3ZhciBvPTNEPQpDW3hdO2lmKG8uc2hvdyYmby5zaG93TGFiZWwpe3ZhciBiO2lmKG8uY29uc3Ry
dWN0b3I9M0Q9M0RhLmpxcGxvdC5DYW52YXNBeGk9CnNUaWNrUmVuZGVyZXImJm8uYW5nbGUpe3Zh
ciBBPTNEKHRoaXMubmFtZT0zRD0zRCJ4YXhpcyIpPzE6LTE7c3dpdGNoKG8ubGFiZT0KbFBvc2l0
aW9uKXtjYXNlImF1dG8iOmlmKEEqby5hbmdsZTwwKXtiPTNELW8uZ2V0V2lkdGgoKStvLl90ZXh0
UmVuZGVyZXIuaGVpPQpnaHQqTWF0aC5zaW4oLW8uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1lbHNl
e2I9M0Qtby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXQ9Cmguc2luKG8uX3RleHRSZW5kZXJlci5h
bmdsZSkvMn1icmVhaztjYXNlImVuZCI6Yj0zRC1vLmdldFdpZHRoKCkrby5fdGV4dFJlbj0KZGVy
ZXIuaGVpZ2h0Kk1hdGguc2luKC1vLl90ZXh0UmVuZGVyZXIuYW5nbGUpLzI7YnJlYWs7Y2FzZSJz
dGFydCI6Yj0zRC1vLl90PQpleHRSZW5kZXJlci5oZWlnaHQqTWF0aC5zaW4oby5fdGV4dFJlbmRl
cmVyLmFuZ2xlKS8yO2JyZWFrO2Nhc2UibWlkZGxlIjpiPQo9M0Qtby5nZXRXaWR0aCgpLzIrby5f
dGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLnNpbigtby5fdGV4dFJlbmRlcmVyLmFuZ2xlKS89CjI7
YnJlYWs7ZGVmYXVsdDpiPTNELW8uZ2V0V2lkdGgoKS8yK28uX3RleHRSZW5kZXJlci5oZWlnaHQq
TWF0aC5zaW4oLW8uX3RleD0KdFJlbmRlcmVyLmFuZ2xlKS8yO2JyZWFrfX1lbHNle2I9M0Qtby5n
ZXRXaWR0aCgpLzJ9dmFyIEQ9M0R0aGlzLnUycChvLnZhbHVlPQopK2IrInB4IjtvLl9lbGVtLmNz
cygibGVmdCIsRCk7by5wYWNrKCl9fXZhciB6PTNEWyJib3R0b20iLDBdO2lmKHEpe3ZhciBtPQo9
M0R0aGlzLl9sYWJlbC5fZWxlbS5vdXRlcldpZHRoKHRydWUpO3RoaXMuX2xhYmVsLl9lbGVtLmNz
cygibGVmdCIsbCtnLzItbS89CjIrInB4Iik7aWYodGhpcy5uYW1lPTNEPTNEInhheGlzIil7dGhp
cy5fbGFiZWwuX2VsZW0uY3NzKCJib3R0b20iLCIwcHgiKTt6PQo9M0RbImJvdHRvbSIsdGhpcy5f
bGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSldfWVsc2V7dGhpcy5fbGFiZWwuX2VsZW0uY3M9
CnMoInRvcCIsIjBweCIpO3o9M0RbInRvcCIsdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQo
dHJ1ZSldfXRoaXMuX2xhYmVsLj0KcGFjaygpfXZhciBkPTNEcGFyc2VJbnQodGhpcy5fdGlja3Mu
bGVuZ3RoL3RoaXMuZ3JvdXBzLDEwKSsxO2Zvcih4PTNEMDt4PHRoPQppcy5fZ3JvdXBMYWJlbHMu
bGVuZ3RoO3grKyl7dmFyIEI9M0QwO3ZhciBmPTNEMDtmb3IodmFyIHU9M0R4KmQ7dTwoeCsxKSpk
O3U9CisrKXtpZih1Pj0zRHRoaXMuX3RpY2tzLmxlbmd0aC0xKXtjb250aW51ZX1pZih0aGlzLl90
aWNrc1t1XS5fZWxlbSYmdGhpcy5fdD0KaWNrc1t1XS5sYWJlbCE9M0QiICIpe3ZhciBvPTNEdGhp
cy5fdGlja3NbdV0uX2VsZW07dmFyIHI9M0RvLnBvc2l0aW9uKCk7Qis9Cj0zRHIubGVmdCtvLm91
dGVyV2lkdGgodHJ1ZSkvMjtmKyt9fUI9M0RCL2Y7dGhpcy5fZ3JvdXBMYWJlbHNbeF0uY3NzKHts
ZWZ0Oj0KKEItdGhpcy5fZ3JvdXBMYWJlbHNbeF0ub3V0ZXJXaWR0aCh0cnVlKS8yKX0pO3RoaXMu
X2dyb3VwTGFiZWxzW3hdLmNzcyh6WzBdPQoselsxXSl9fWVsc2V7Zm9yKHg9M0QwO3g8Qy5sZW5n
dGg7eCsrKXt2YXIgbz0zRENbeF07aWYoby5zaG93JiZvLnNob3dMYWJlbCk9Cnt2YXIgYjtpZihv
LmNvbnN0cnVjdG9yPTNEPTNEYS5qcXBsb3QuQ2FudmFzQXhpc1RpY2tSZW5kZXJlciYmby5hbmds
ZSl7dmFyID0KQT0zRCh0aGlzLm5hbWU9M0Q9M0QieWF4aXMiKT8xOi0xO3N3aXRjaChvLmxhYmVs
UG9zaXRpb24pe2Nhc2UiYXV0byI6Y2FzZSJlPQpuZCI6aWYoQSpvLmFuZ2xlPDApe2I9M0Qtby5f
dGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcygtby5fdGV4dFJlbmRlcmVyLmE9Cm5nbGUpLzJ9
ZWxzZXtiPTNELW8uZ2V0SGVpZ2h0KCkrby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNYXRoLmNvcyhv
Ll90ZXh0UmVuZD0KZXJlci5hbmdsZSkvMn1icmVhaztjYXNlInN0YXJ0IjppZihvLmFuZ2xlPjAp
e2I9M0Qtby5fdGV4dFJlbmRlcmVyLmhlaWdodCpNPQphdGguY29zKC1vLl90ZXh0UmVuZGVyZXIu
YW5nbGUpLzJ9ZWxzZXtiPTNELW8uZ2V0SGVpZ2h0KCkrby5fdGV4dFJlbmRlcmVyLmg9CmVpZ2h0
Kk1hdGguY29zKG8uX3RleHRSZW5kZXJlci5hbmdsZSkvMn1icmVhaztjYXNlIm1pZGRsZSI6Yj0z
RC1vLmdldEhlaWdodD0KKCkvMjticmVhaztkZWZhdWx0OmI9M0Qtby5nZXRIZWlnaHQoKS8yO2Jy
ZWFrfX1lbHNle2I9M0Qtby5nZXRIZWlnaHQoKS8yfXZhPQpyIEQ9M0R0aGlzLnUycChvLnZhbHVl
KStiKyJweCI7by5fZWxlbS5jc3MoInRvcCIsRCk7by5wYWNrKCl9fXZhciB6PTNEWyJsZWY9CnQi
LDBdO2lmKHEpe3ZhciB5PTNEdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJIZWlnaHQodHJ1ZSk7dGhp
cy5fbGFiZWwuX2VsZW0uYz0Kc3MoInRvcCIsbi1nLzIteS8yKyJweCIpO2lmKHRoaXMubmFtZT0z
RD0zRCJ5YXhpcyIpe3RoaXMuX2xhYmVsLl9lbGVtLmNzcygiPQpsZWZ0IiwiMHB4Iik7ej0zRFsi
bGVmdCIsdGhpcy5fbGFiZWwuX2VsZW0ub3V0ZXJXaWR0aCh0cnVlKV19ZWxzZXt0aGlzLl9sYWI9
CmVsLl9lbGVtLmNzcygicmlnaHQiLCIwcHgiKTt6PTNEWyJyaWdodCIsdGhpcy5fbGFiZWwuX2Vs
ZW0ub3V0ZXJXaWR0aCh0cnVlKT0KXX10aGlzLl9sYWJlbC5wYWNrKCl9dmFyIGQ9M0RwYXJzZUlu
dCh0aGlzLl90aWNrcy5sZW5ndGgvdGhpcy5ncm91cHMsMTApKzE7PQpmb3IoeD0zRDA7eDx0aGlz
Ll9ncm91cExhYmVscy5sZW5ndGg7eCsrKXt2YXIgQj0zRDA7dmFyIGY9M0QwO2Zvcih2YXIgdT0z
RHg9CipkO3U8KHgrMSkqZDt1Kyspe2lmKHU+PTNEdGhpcy5fdGlja3MubGVuZ3RoLTEpe2NvbnRp
bnVlfWlmKHRoaXMuX3RpY2tzW3VdLj0KX2VsZW0mJnRoaXMuX3RpY2tzW3VdLmxhYmVsIT0zRCIg
Iil7dmFyIG89M0R0aGlzLl90aWNrc1t1XS5fZWxlbTt2YXIgcj0zRG8uPQpwb3NpdGlvbigpO0Ir
PTNEci50b3Arby5vdXRlckhlaWdodCgpLzI7ZisrfX1CPTNEQi9mO3RoaXMuX2dyb3VwTGFiZWxz
W3hdLmM9CnNzKHt0b3A6Qi10aGlzLl9ncm91cExhYmVsc1t4XS5vdXRlckhlaWdodCgpLzJ9KTt0
aGlzLl9ncm91cExhYmVsc1t4XS5jc3Moej0KWzBdLHpbMV0pfX19fX0pKGpRdWVyeSk7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTliMzgxODA5N2JkM2Q1YTE0
OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFjPQo5M2Q4MGZiZTkzNWJh
OGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3BsdWdpbnMv
anFwbG89CnQvcGx1Z2lucy9qcXBsb3QuY3Vyc29yLm1pbi5qcwotLS0gL2Rldi9udWxsCisrKyBi
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvcGx1Z2lucy9qcXBs
b3QvcGx1Z2lucy9qcT0KcGxvdC5jdXJzb3IubWluLmpzCkBAIC0wLDAgKzEsMyBAQAorLyoganFQ
bG90IDEuMC44cjEyNTAgfCAoYykgMjAwOS0yMDEzIENocmlzIExlb25lbGxvIHwganBsb3QuY29t
CisgICBqc0RhdGUgfCAoYykgMjAxMC0yMDEzIENocmlzIExlb25lbGxvCisgKi8oZnVuY3Rpb24o
ail7ai5qcXBsb3QuQ3Vyc29yPTNEZnVuY3Rpb24ocSl7dGhpcy5zdHlsZT0zRCJjcm9zc2hhaXIi
O3RoaT0Kcy5wcmV2aW91c0N1cnNvcj0zRCJhdXRvIjt0aGlzLnNob3c9M0RqLmpxcGxvdC5jb25m
aWcuZW5hYmxlUGx1Z2luczt0aGlzLnNoPQpvd1Rvb2x0aXA9M0R0cnVlO3RoaXMuZm9sbG93TW91
c2U9M0RmYWxzZTt0aGlzLnRvb2x0aXBMb2NhdGlvbj0zRCJzZSI7dGhpcy49CnRvb2x0aXBPZmZz
ZXQ9M0Q2O3RoaXMuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb249M0RmYWxzZTt0aGlzLnNob3dUb29s
dGlwVW5pdD0KUG9zaXRpb249M0R0cnVlO3RoaXMuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb249M0Rm
YWxzZTt0aGlzLnRvb2x0aXBGb3JtYXRTdHJpPQpuZz0zRCIlLjRQLCAlLjRQIjt0aGlzLnVzZUF4
ZXNGb3JtYXR0ZXJzPTNEdHJ1ZTt0aGlzLnRvb2x0aXBBeGlzR3JvdXBzPTNEW109Cjt0aGlzLnpv
b209M0RmYWxzZTt0aGlzLnpvb21Qcm94eT0zRGZhbHNlO3RoaXMuem9vbVRhcmdldD0zRGZhbHNl
O3RoaXMubG9vcz0KZVpvb209M0R0cnVlO3RoaXMuY2xpY2tSZXNldD0zRGZhbHNlO3RoaXMuZGJs
Q2xpY2tSZXNldD0zRHRydWU7dGhpcy5zaG93VmVyPQp0aWNhbExpbmU9M0RmYWxzZTt0aGlzLnNo
b3dIb3Jpem9udGFsTGluZT0zRGZhbHNlO3RoaXMuY29uc3RyYWluWm9vbVRvPTNEIm49Cm9uZSI7
dGhpcy5zaGFwZVJlbmRlcmVyPTNEbmV3IGouanFwbG90LlNoYXBlUmVuZGVyZXIoKTt0aGlzLl96
b29tPTNEe3N0YXJ0Oj0KW10sZW5kOltdLHN0YXJ0ZWQ6ZmFsc2Usem9vbWluZzpmYWxzZSxpc1pv
b21lZDpmYWxzZSxheGVzOntzdGFydDp7fSxlbmQ6e319PQosZ3JpZHBvczp7fSxkYXRhcG9zOnt9
fTt0aGlzLl90b29sdGlwRWxlbTt0aGlzLnpvb21DYW52YXM7dGhpcy5jdXJzb3JDYW52YXM9Cjt0
aGlzLmludGVyc2VjdGlvblRocmVzaG9sZD0zRDI7dGhpcy5zaG93Q3Vyc29yTGVnZW5kPTNEZmFs
c2U7dGhpcy5jdXJzb3JMZT0KZ2VuZEZvcm1hdFN0cmluZz0zRGouanFwbG90LkN1cnNvci5jdXJz
b3JMZWdlbmRGb3JtYXRTdHJpbmc7dGhpcy5fb2xkSGFuZGxlPQpycz0zRHtvbnNlbGVjdHN0YXJ0
Om51bGwsb25kcmFnOm51bGwsb25tb3VzZWRvd246bnVsbH07dGhpcy5jb25zdHJhaW5PdXRzaWQ9
CmVab29tPTNEdHJ1ZTt0aGlzLnNob3dUb29sdGlwT3V0c2lkZVpvb209M0RmYWxzZTt0aGlzLm9u
R3JpZD0zRGZhbHNlO2ouZXh0ZT0KbmQodHJ1ZSx0aGlzLHEpfTtqLmpxcGxvdC5DdXJzb3IuY3Vy
c29yTGVnZW5kRm9ybWF0U3RyaW5nPTNEIiVzIHg6JXMsIHk6JXMiPQo7ai5qcXBsb3QuQ3Vyc29y
LmluaXQ9M0RmdW5jdGlvbih0LHMscil7dmFyIHE9M0RyfHx7fTt0aGlzLnBsdWdpbnMuY3Vyc29y
PQo9M0RuZXcgai5qcXBsb3QuQ3Vyc29yKHEuY3Vyc29yKTt2YXIgdT0zRHRoaXMucGx1Z2lucy5j
dXJzb3I7aWYodS5zaG93KXtqLmo9CnFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFw
bG90TW91c2VFbnRlciIsYl0pO2ouanFwbG90LmV2ZW50TGlzdGVuZT0Kckhvb2tzLnB1c2goWyJq
cXBsb3RNb3VzZUxlYXZlIixmXSk7ai5qcXBsb3QuZXZlbnRMaXN0ZW5lckhvb2tzLnB1c2goWyJq
cXBsPQpvdE1vdXNlTW92ZSIsaV0pO2lmKHUuc2hvd0N1cnNvckxlZ2VuZCl7ci5sZWdlbmQ9M0Ry
LmxlZ2VuZHx8e307ci5sZWdlbmQucmU9Cm5kZXJlcj0zRGouanFwbG90LkN1cnNvckxlZ2VuZFJl
bmRlcmVyO3IubGVnZW5kLmZvcm1hdFN0cmluZz0zRHRoaXMucGx1Z2lucz0KLmN1cnNvci5jdXJz
b3JMZWdlbmRGb3JtYXRTdHJpbmc7ci5sZWdlbmQuc2hvdz0zRHRydWV9aWYodS56b29tKXtqLmpx
cGxvdC5lPQp2ZW50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90TW91c2VEb3duIixhXSk7aWYo
dS5jbGlja1Jlc2V0KXtqLmpxcGxvdC5ldmU9Cm50TGlzdGVuZXJIb29rcy5wdXNoKFsianFwbG90
Q2xpY2siLGtdKX1pZih1LmRibENsaWNrUmVzZXQpe2ouanFwbG90LmV2ZW50TD0KaXN0ZW5lckhv
b2tzLnB1c2goWyJqcXBsb3REYmxDbGljayIsY10pfX10aGlzLnJlc2V0Wm9vbT0zRGZ1bmN0aW9u
KCl7dmFyIHg9Cj0zRHRoaXMuYXhlcztpZighdS56b29tUHJveHkpe2Zvcih2YXIgdyBpbiB4KXt4
W3ddLnJlc2V0KCk7eFt3XS5fdGlja3M9M0RbXT0KO2lmKHUuX3pvb20uYXhlc1t3XSE9M0Q9M0R1
bmRlZmluZWQpe3hbd10uX2F1dG9Gb3JtYXRTdHJpbmc9M0R1Ll96b29tLmF4ZXNbPQp3XS50aWNr
Rm9ybWF0U3RyaW5nfX10aGlzLnJlZHJhdygpfWVsc2V7dmFyIHY9M0R0aGlzLnBsdWdpbnMuY3Vy
c29yLnpvb21DYW49CnZhcy5fY3R4O3YuY2xlYXJSZWN0KDAsMCx2LmNhbnZhcy53aWR0aCx2LmNh
bnZhcy5oZWlnaHQpO3Y9M0RudWxsfXRoaXMucGx1Zz0KaW5zLmN1cnNvci5fem9vbS5pc1pvb21l
ZD0zRGZhbHNlO3RoaXMudGFyZ2V0LnRyaWdnZXIoImpxcGxvdFJlc2V0Wm9vbSIsW3RoPQppcyx0
aGlzLnBsdWdpbnMuY3Vyc29yXSl9O2lmKHUuc2hvd1Rvb2x0aXBEYXRhUG9zaXRpb24pe3Uuc2hv
d1Rvb2x0aXBVbml0UG89CnNpdGlvbj0zRGZhbHNlO3Uuc2hvd1Rvb2x0aXBHcmlkUG9zaXRpb249
M0RmYWxzZTtpZihxLmN1cnNvci50b29sdGlwRm9ybWF0Uz0KdHJpbmc9M0Q9M0R1bmRlZmluZWQp
e3UudG9vbHRpcEZvcm1hdFN0cmluZz0zRGouanFwbG90LkN1cnNvci5jdXJzb3JMZWdlbmRGPQpv
cm1hdFN0cmluZ319fX07ai5qcXBsb3QuQ3Vyc29yLnBvc3REcmF3PTNEZnVuY3Rpb24oKXt2YXIg
eD0zRHRoaXMucGx1Z2lucy49CmN1cnNvcjtpZih4Lnpvb21DYW52YXMpe3guem9vbUNhbnZhcy5y
ZXNldENhbnZhcygpO3guem9vbUNhbnZhcz0zRG51bGx9aWYoeD0KLmN1cnNvckNhbnZhcyl7eC5j
dXJzb3JDYW52YXMucmVzZXRDYW52YXMoKTt4LmN1cnNvckNhbnZhcz0zRG51bGx9aWYoeC5fdG9v
PQpsdGlwRWxlbSl7eC5fdG9vbHRpcEVsZW0uZW1wdHlGb3JjZSgpO3guX3Rvb2x0aXBFbGVtPTNE
bnVsbH1pZih4Lnpvb20pe3guem89Cm9tQ2FudmFzPTNEbmV3IGouanFwbG90LkdlbmVyaWNDYW52
YXMoKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yZSh4Lnpvbz0KbUNhbnZhcy5jcmVhdGVF
bGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3Qtem9vbS1jYW52YXMiLHRoaXMuX3Bsb3RE
aW1lPQpuc2lvbnMsdGhpcykpO3guem9vbUNhbnZhcy5zZXRDb250ZXh0KCl9dmFyIHY9M0Rkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXY9CiIpO3guX3Rvb2x0aXBFbGVtPTNEaih2KTt2PTNEbnVs
bDt4Ll90b29sdGlwRWxlbS5hZGRDbGFzcygianFwbG90LWN1cnNvci10bz0Kb2x0aXAiKTt4Ll90
b29sdGlwRWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSJ9KTtpZih4
Lnpvb21DPQphbnZhcyl7eC56b29tQ2FudmFzLl9lbGVtLmJlZm9yZSh4Ll90b29sdGlwRWxlbSl9
ZWxzZXt0aGlzLmV2ZW50Q2FudmFzLl9lbGU9Cm0uYmVmb3JlKHguX3Rvb2x0aXBFbGVtKX1pZih4
LnNob3dWZXJ0aWNhbExpbmV8fHguc2hvd0hvcml6b250YWxMaW5lKXt4LmN1cj0Kc29yQ2FudmFz
PTNEbmV3IGouanFwbG90LkdlbmVyaWNDYW52YXMoKTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJl
Zm9yZSh4LmN1PQpyc29yQ2FudmFzLmNyZWF0ZUVsZW1lbnQodGhpcy5fZ3JpZFBhZGRpbmcsImpx
cGxvdC1jdXJzb3ItY2FudmFzIix0aGlzLl9wbG89CnREaW1lbnNpb25zLHRoaXMpKTt4LmN1cnNv
ckNhbnZhcy5zZXRDb250ZXh0KCl9aWYoeC5zaG93VG9vbHRpcFVuaXRQb3NpdGlvbj0KKXtpZih4
LnRvb2x0aXBBeGlzR3JvdXBzLmxlbmd0aD0zRD0zRD0zRDApe3ZhciB0PTNEdGhpcy5zZXJpZXM7
dmFyIHU7dmFyIHE9Cj0zRFtdO2Zvcih2YXIgcj0zRDA7cjx0Lmxlbmd0aDtyKyspe3U9M0R0W3Jd
O3ZhciB3PTNEdS54YXhpcysiLCIrdS55YXhpcztpZj0KKGouaW5BcnJheSh3LHEpPTNEPTNELTEp
e3EucHVzaCh3KX19Zm9yKHZhciByPTNEMDtyPHEubGVuZ3RoO3IrKyl7eC50b29sdGlwPQpBeGlz
R3JvdXBzLnB1c2gocVtyXS5zcGxpdCgiLCIpKX19fX07ai5qcXBsb3QuQ3Vyc29yLnpvb21Qcm94
eT0zRGZ1bmN0aW9uKHY9CixyKXt2YXIgcT0zRHYucGx1Z2lucy5jdXJzb3I7dmFyIHU9M0RyLnBs
dWdpbnMuY3Vyc29yO3Euem9vbVRhcmdldD0zRHRydWU7cT0KLnpvb209M0R0cnVlO3Euc3R5bGU9
M0QiYXV0byI7cS5kYmxDbGlja1Jlc2V0PTNEZmFsc2U7dS56b29tPTNEdHJ1ZTt1Lnpvb21QPQpy
b3h5PTNEdHJ1ZTtyLnRhcmdldC5iaW5kKCJqcXBsb3Rab29tIix0KTtyLnRhcmdldC5iaW5kKCJq
cXBsb3RSZXNldFpvb20iLHM9Cik7ZnVuY3Rpb24gdCh4LHcseix5LEEpe3EuZG9ab29tKHcseix2
LEEpfWZ1bmN0aW9uIHModyx4LHkpe3YucmVzZXRab29tKCl9fT0KO2ouanFwbG90LkN1cnNvci5w
cm90b3R5cGUucmVzZXRab29tPTNEZnVuY3Rpb24odSx2KXt2YXIgdD0zRHUuYXhlczt2YXIgcz0K
PTNEdi5fem9vbS5heGVzO2lmKCF1LnBsdWdpbnMuY3Vyc29yLnpvb21Qcm94eSYmdi5fem9vbS5p
c1pvb21lZCl7Zm9yKHZhciByPQogaW4gdCl7dFtyXS5yZXNldCgpO3Rbcl0uX3RpY2tzPTNEW107
dFtyXS5fYXV0b0Zvcm1hdFN0cmluZz0zRHNbcl0udGlja0Zvcm09CmF0U3RyaW5nfXUucmVkcmF3
KCk7di5fem9vbS5pc1pvb21lZD0zRGZhbHNlfWVsc2V7dmFyIHE9M0R2Lnpvb21DYW52YXMuX2N0
eD0KO3EuY2xlYXJSZWN0KDAsMCxxLmNhbnZhcy53aWR0aCxxLmNhbnZhcy5oZWlnaHQpO3E9M0Ru
dWxsfXUudGFyZ2V0LnRyaWdnZXIoPQoianFwbG90UmVzZXRab29tIixbdSx2XSl9O2ouanFwbG90
LkN1cnNvci5yZXNldFpvb209M0RmdW5jdGlvbihxKXtxLnJlc2V0Wm89Cm9tKCl9O2ouanFwbG90
LkN1cnNvci5wcm90b3R5cGUuZG9ab29tPTNEZnVuY3Rpb24oRyx0LEMsdSl7dmFyIEk9M0R1O3Zh
ciBGPQo9M0RDLmF4ZXM7dmFyIHI9M0RJLl96b29tLmF4ZXM7dmFyIHc9M0RyLnN0YXJ0O3ZhciBz
PTNEci5lbmQ7dmFyIEIsRSx6LEQsdiw9CngscSxILEo7dmFyIEE9M0RDLnBsdWdpbnMuY3Vyc29y
Lnpvb21DYW52YXMuX2N0eDtpZigoSS5jb25zdHJhaW5ab29tVG89M0Q9Cj0zRCJub25lIiYmTWF0
aC5hYnMoRy54LUkuX3pvb20uc3RhcnRbMF0pPjYmJk1hdGguYWJzKEcueS1JLl96b29tLnN0YXJ0
WzFdKT0KPjYpfHwoSS5jb25zdHJhaW5ab29tVG89M0Q9M0QieCImJk1hdGguYWJzKEcueC1JLl96
b29tLnN0YXJ0WzBdKT42KXx8KEkuY29uPQpzdHJhaW5ab29tVG89M0Q9M0QieSImJk1hdGguYWJz
KEcueS1JLl96b29tLnN0YXJ0WzFdKT42KSl7aWYoIUMucGx1Z2lucy5jdXI9CnNvci56b29tUHJv
eHkpe2Zvcih2YXIgeSBpbiB0KXtpZihJLl96b29tLmF4ZXNbeV09M0Q9M0R1bmRlZmluZWQpe0ku
X3pvb20uYT0KeGVzW3ldPTNEe307SS5fem9vbS5heGVzW3ldLm51bWJlclRpY2tzPTNERlt5XS5u
dW1iZXJUaWNrcztJLl96b29tLmF4ZXNbeV0uPQp0aWNrSW50ZXJ2YWw9M0RGW3ldLnRpY2tJbnRl
cnZhbDtJLl96b29tLmF4ZXNbeV0uZGFUaWNrSW50ZXJ2YWw9M0RGW3ldLmRhVGk9CmNrSW50ZXJ2
YWw7SS5fem9vbS5heGVzW3ldLm1pbj0zREZbeV0ubWluO0kuX3pvb20uYXhlc1t5XS5tYXg9M0RG
W3ldLm1heDtJLj0KX3pvb20uYXhlc1t5XS50aWNrRm9ybWF0U3RyaW5nPTNEKEZbeV0udGlja09w
dGlvbnMhPTNEbnVsbCk/Rlt5XS50aWNrT3B0aW9uPQpzLmZvcm1hdFN0cmluZzoiIn1pZigoSS5j
b25zdHJhaW5ab29tVG89M0Q9M0Qibm9uZSIpfHwoSS5jb25zdHJhaW5ab29tVG89M0Q9Cj0zRCJ4
IiYmeS5jaGFyQXQoMCk9M0Q9M0QieCIpfHwoSS5jb25zdHJhaW5ab29tVG89M0Q9M0QieSImJnku
Y2hhckF0KDApPTNEPQo9M0QieSIpKXt6PTNEdFt5XTtpZih6IT0zRG51bGwpe2lmKHo+d1t5XSl7
dj0zRHdbeV07eD0zRHp9ZWxzZXtEPTNEd1t5XS16O3Y9Cj0zRHo7eD0zRHdbeV19cT0zREZbeV07
SD0zRG51bGw7aWYocS5hbGlnblRpY2tzKXtpZihxLm5hbWU9M0Q9M0Q9M0QieDJheGlzIj0KJiZD
LmF4ZXMueGF4aXMuc2hvdyl7SD0zREMuYXhlcy54YXhpcy5udW1iZXJUaWNrc31lbHNle2lmKHEu
bmFtZS5jaGFyQXQoMCk9Cj0zRD0zRD0zRCJ5IiYmcS5uYW1lIT0zRD0zRCJ5YXhpcyImJnEubmFt
ZSE9M0Q9M0QieU1pZEF4aXMiJiZDLmF4ZXMueWF4aXMucz0KaG93KXtIPTNEQy5heGVzLnlheGlz
Lm51bWJlclRpY2tzfX19aWYodGhpcy5sb29zZVpvb20mJihGW3ldLnJlbmRlcmVyLmNvbnN0PQpy
dWN0b3I9M0Q9M0Q9M0RqLmpxcGxvdC5MaW5lYXJBeGlzUmVuZGVyZXJ8fEZbeV0ucmVuZGVyZXIu
Y29uc3RydWN0b3I9M0Q9M0Q9Cj0zRGouanFwbG90LkxvZ0F4aXNSZW5kZXJlcikpe0o9M0RqLmpx
cGxvdC5MaW5lYXJUaWNrR2VuZXJhdG9yKHYseCxxLl9zY2FsZT0KZmFjdCxIKTtpZihGW3ldLnRp
Y2tJbnNldCYmSlswXTxGW3ldLm1pbitGW3ldLnRpY2tJbnNldCpGW3ldLnRpY2tJbnRlcnZhbCl7
PQpKWzBdKz0zREpbNF07SlsyXS09M0QxfWlmKEZbeV0udGlja0luc2V0JiZKWzFdPkZbeV0ubWF4
LUZbeV0udGlja0luc2V0KkZbeV09Ci50aWNrSW50ZXJ2YWwpe0pbMV0tPTNESls0XTtKWzJdLT0z
RDF9aWYoRlt5XS5yZW5kZXJlci5jb25zdHJ1Y3Rvcj0zRD0zRD0zRD0Kai5qcXBsb3QuTG9nQXhp
c1JlbmRlcmVyJiZKWzBdPEZbeV0ubWluKXtKWzBdKz0zREpbNF07SlsyXS09M0QxfUZbeV0ubWlu
PTNEPQpKWzBdO0ZbeV0ubWF4PTNESlsxXTtGW3ldLl9hdXRvRm9ybWF0U3RyaW5nPTNESlszXTtG
W3ldLm51bWJlclRpY2tzPTNESlsyXTs9CkZbeV0udGlja0ludGVydmFsPTNESls0XTtGW3ldLmRh
VGlja0ludGVydmFsPTNEW0pbNF0vMTAwMCwic2Vjb25kcyJdfWVsc2V7Rj0KW3ldLm1pbj0zRHY7
Rlt5XS5tYXg9M0R4O0ZbeV0udGlja0ludGVydmFsPTNEbnVsbDtGW3ldLm51bWJlclRpY2tzPTNE
bnVsbDtGPQpbeV0uZGFUaWNrSW50ZXJ2YWw9M0RudWxsfUZbeV0uX3RpY2tzPTNEW119fX1BLmNs
ZWFyUmVjdCgwLDAsQS5jYW52YXMud2lkdGg9CixBLmNhbnZhcy5oZWlnaHQpO0MucmVkcmF3KCk7
SS5fem9vbS5pc1pvb21lZD0zRHRydWU7QT0zRG51bGx9Qy50YXJnZXQudHJpZz0KZ2VyKCJqcXBs
b3Rab29tIixbRyx0LEMsdV0pfX07ai5qcXBsb3QucHJlSW5pdEhvb2tzLnB1c2goai5qcXBsb3Qu
Q3Vyc29yLmluPQppdCk7ai5qcXBsb3QucG9zdERyYXdIb29rcy5wdXNoKGouanFwbG90LkN1cnNv
ci5wb3N0RHJhdyk7ZnVuY3Rpb24gZShHLHIsQyk9Cnt2YXIgSj0zREMucGx1Z2lucy5jdXJzb3I7
dmFyIHc9M0QiIjt2YXIgTj0zRGZhbHNlO2lmKEouc2hvd1Rvb2x0aXBHcmlkUG9zaT0KdGlvbil7
dz0zREcueCsiLCAiK0cueTtOPTNEdHJ1ZX1pZihKLnNob3dUb29sdGlwVW5pdFBvc2l0aW9uKXt2
YXIgRjtmb3IodmFyPQogRT0zRDA7RTxKLnRvb2x0aXBBeGlzR3JvdXBzLmxlbmd0aDtFKyspe0Y9
M0RKLnRvb2x0aXBBeGlzR3JvdXBzW0VdO2lmKE4pe3c9Cis9M0QiPGJyIC8+In1pZihKLnVzZUF4
ZXNGb3JtYXR0ZXJzKXtmb3IodmFyIEQ9M0QwO0Q8Ri5sZW5ndGg7RCsrKXtpZihEKXt3Kz0KPTNE
IiwgIn12YXIgSD0zREMuYXhlc1tGW0RdXS5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBCPTNEQy5h
eGVzW0ZbRF1dLl90aWNrPQpzWzBdLmZvcm1hdFN0cmluZzt3Kz0zREgoQixyW0ZbRF1dKX19ZWxz
ZXt3Kz0zRGouanFwbG90LnNwcmludGYoSi50b29sdGlwRm89CnJtYXRTdHJpbmcscltGWzBdXSxy
W0ZbMV1dKX1OPTNEdHJ1ZX19aWYoSi5zaG93VG9vbHRpcERhdGFQb3NpdGlvbil7dmFyIHU9Cj0z
REMuc2VyaWVzO3ZhciBNPTNEZChDLEcueCxHLnkpO3ZhciBOPTNEZmFsc2U7Zm9yKHZhciBFPTNE
MDtFPHUubGVuZ3RoO0UrKz0KKXtpZih1W0VdLnNob3cpe3ZhciB5PTNEdVtFXS5pbmRleDt2YXIg
dD0zRHVbRV0ubGFiZWwudG9TdHJpbmcoKTt2YXIgST0zRGouPQppbkFycmF5KHksTS5pbmRpY2Vz
KTt2YXIgej0zRHVuZGVmaW5lZDt2YXIgeD0zRHVuZGVmaW5lZDtpZihJIT0zRC0xKXt2YXIgTD0K
PTNETS5kYXRhW0ldLmRhdGE7aWYoSi51c2VBeGVzRm9ybWF0dGVycyl7dmFyIEE9M0R1W0VdLl94
YXhpcy5fdGlja3NbMF0uZm9yPQptYXR0ZXI7dmFyIHE9M0R1W0VdLl95YXhpcy5fdGlja3NbMF0u
Zm9ybWF0dGVyO3ZhciBLPTNEdVtFXS5feGF4aXMuX3RpY2tzWzA9Cl0uZm9ybWF0U3RyaW5nO3Zh
ciB2PTNEdVtFXS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt6PTNEQShLLExbMF0pO3g9
Cj0zRHEodixMWzFdKX1lbHNle3o9M0RMWzBdO3g9M0RMWzFdfWlmKE4pe3crPTNEIjxiciAvPiJ9
dys9M0RqLmpxcGxvdC5zcHJpbj0KdGYoSi50b29sdGlwRm9ybWF0U3RyaW5nLHQseix4KTtOPTNE
dHJ1ZX19fX1KLl90b29sdGlwRWxlbS5odG1sKHcpfWZ1bmN0aW9uPQogZyhDLEEpe3ZhciBFPTNE
QS5wbHVnaW5zLmN1cnNvcjt2YXIgej0zREUuY3Vyc29yQ2FudmFzLl9jdHg7ei5jbGVhclJlY3Qo
MCw9CjAsei5jYW52YXMud2lkdGgsei5jYW52YXMuaGVpZ2h0KTtpZihFLnNob3dWZXJ0aWNhbExp
bmUpe0Uuc2hhcGVSZW5kZXJlci5kcj0KYXcoeixbW0MueCwwXSxbQy54LHouY2FudmFzLmhlaWdo
dF1dKX1pZihFLnNob3dIb3Jpem9udGFsTGluZSl7RS5zaGFwZVJlbmRlPQpyZXIuZHJhdyh6LFtb
MCxDLnldLFt6LmNhbnZhcy53aWR0aCxDLnldXSl9dmFyIEc9M0RkKEEsQy54LEMueSk7aWYoRS5z
aG93Q3U9CnJzb3JMZWdlbmQpe3ZhciByPTNEaihBLnRhcmdldElkKyIgdGQuanFwbG90LWN1cnNv
ci1sZWdlbmQtbGFiZWwiKTtmb3IodmFyID0KQj0zRDA7QjxyLmxlbmd0aDtCKyspe3ZhciB2PTNE
aihyW0JdKS5kYXRhKCJzZXJpZXNJbmRleCIpO3ZhciB0PTNEQS5zZXJpZXNbPQp2XTt2YXIgcz0z
RHQubGFiZWwudG9TdHJpbmcoKTt2YXIgRD0zRGouaW5BcnJheSh2LEcuaW5kaWNlcyk7dmFyIHg9
M0R1bmRlZmk9Cm5lZDt2YXIgdz0zRHVuZGVmaW5lZDtpZihEIT0zRC0xKXt2YXIgSD0zREcuZGF0
YVtEXS5kYXRhO2lmKEUudXNlQXhlc0Zvcm1hdD0KdGVycyl7dmFyIHk9M0R0Ll94YXhpcy5fdGlj
a3NbMF0uZm9ybWF0dGVyO3ZhciBxPTNEdC5feWF4aXMuX3RpY2tzWzBdLmZvcm1hPQp0dGVyO3Zh
ciBGPTNEdC5feGF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmluZzt2YXIgdT0zRHQuX3lheGlzLl90
aWNrc1swXS5mb3I9Cm1hdFN0cmluZzt4PTNEeShGLEhbMF0pO3c9M0RxKHUsSFsxXSl9ZWxzZXt4
PTNESFswXTt3PTNESFsxXX19aWYoQS5sZWdlbmQuZT0Kc2NhcGVIdG1sKXtqKHJbQl0pLnRleHQo
ai5qcXBsb3Quc3ByaW50ZihFLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyxzLHgsdykpPQp9ZWxz
ZXtqKHJbQl0pLmh0bWwoai5qcXBsb3Quc3ByaW50ZihFLmN1cnNvckxlZ2VuZEZvcm1hdFN0cmlu
ZyxzLHgsdykpfX19ej0KPTNEbnVsbH1mdW5jdGlvbiBkKEEsRixFKXt2YXIgQj0zRHtpbmRpY2Vz
OltdLGRhdGE6W119O3ZhciBHLHcsdSxDLHYscSx0O3ZhPQpyIHo7dmFyIEQ9M0RBLnBsdWdpbnMu
Y3Vyc29yO2Zvcih2YXIgdz0zRDA7dzxBLnNlcmllcy5sZW5ndGg7dysrKXtHPTNEQS5zZXI9Cmll
c1t3XTtxPTNERy5yZW5kZXJlcjtpZihHLnNob3cpe3o9M0RELmludGVyc2VjdGlvblRocmVzaG9s
ZDtpZihHLnNob3dNYXJrZT0Kcil7eis9M0RHLm1hcmtlclJlbmRlcmVyLnNpemUvMn1mb3IodmFy
IHY9M0QwO3Y8Ry5ncmlkRGF0YS5sZW5ndGg7disrKXt0PTNEPQpHLmdyaWREYXRhW3ZdO2lmKEQu
c2hvd1ZlcnRpY2FsTGluZSl7aWYoTWF0aC5hYnMoRi10WzBdKTw9M0R6KXtCLmluZGljZXMucHU9
CnNoKHcpO0IuZGF0YS5wdXNoKHtzZXJpZXNJbmRleDp3LHBvaW50SW5kZXg6dixncmlkRGF0YTp0
LGRhdGE6Ry5kYXRhW3ZdfSl9fT0KfX19cmV0dXJuIEJ9ZnVuY3Rpb24gbihyLHQpe3ZhciB2PTNE
dC5wbHVnaW5zLmN1cnNvcjt2YXIgcz0zRHYuX3Rvb2x0aXBFbGVtPQo7c3dpdGNoKHYudG9vbHRp
cExvY2F0aW9uKXtjYXNlIm53Ijp2YXIgcT0zRHIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0LXMub3V0
ZXI9CldpZHRoKHRydWUpLXYudG9vbHRpcE9mZnNldDt2YXIgdT0zRHIueSt0Ll9ncmlkUGFkZGlu
Zy50b3Atdi50b29sdGlwT2Zmc2V0LT0Kcy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlIm4i
OnZhciBxPTNEci54K3QuX2dyaWRQYWRkaW5nLmxlZnQtcy5vdXRlcldpPQpkdGgodHJ1ZSkvMjt2
YXIgdT0zRHIueSt0Ll9ncmlkUGFkZGluZy50b3Atdi50b29sdGlwT2Zmc2V0LXMub3V0ZXJIZWln
aHQodHI9CnVlKTticmVhaztjYXNlIm5lIjp2YXIgcT0zRHIueCt0Ll9ncmlkUGFkZGluZy5sZWZ0
K3YudG9vbHRpcE9mZnNldDt2YXIgdT0zRD0Kci55K3QuX2dyaWRQYWRkaW5nLnRvcC12LnRvb2x0
aXBPZmZzZXQtcy5vdXRlckhlaWdodCh0cnVlKTticmVhaztjYXNlImUiOnZhPQpyIHE9M0RyLngr
dC5fZ3JpZFBhZGRpbmcubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBh
ZGRpbmcudG89CnAtcy5vdXRlckhlaWdodCh0cnVlKS8yO2JyZWFrO2Nhc2Uic2UiOnZhciBxPTNE
ci54K3QuX2dyaWRQYWRkaW5nLmxlZnQrdi50bz0Kb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5f
Z3JpZFBhZGRpbmcudG9wK3YudG9vbHRpcE9mZnNldDticmVhaztjYXNlInMiOnZhPQpyIHE9M0Ry
LngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgdT0zRHIueSt0
Ll9ncmlkUGFkZGk9Cm5nLnRvcCt2LnRvb2x0aXBPZmZzZXQ7YnJlYWs7Y2FzZSJzdyI6dmFyIHE9
M0RyLngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dD0KZXJXaWR0aCh0cnVlKS12LnRvb2x0aXBP
ZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcudG9wK3YudG9vbHRpcE9mZnNlPQp0O2Jy
ZWFrO2Nhc2UidyI6dmFyIHE9M0RyLngrdC5fZ3JpZFBhZGRpbmcubGVmdC1zLm91dGVyV2lkdGgo
dHJ1ZSktdi50b29sdGk9CnBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcudG9wLXMu
b3V0ZXJIZWlnaHQodHJ1ZSkvMjticmVhaztkZWZhdWx0Oj0KdmFyIHE9M0RyLngrdC5fZ3JpZFBh
ZGRpbmcubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHU9M0RyLnkrdC5fZ3JpZFBhZGRpbmcuPQp0
b3Ardi50b29sdGlwT2Zmc2V0O2JyZWFrfXMuY3NzKCJsZWZ0IixxKTtzLmNzcygidG9wIix1KTtz
PTNEbnVsbH1mdW5jdGlvbiA9Cm0odSl7dmFyIHM9M0R1Ll9ncmlkUGFkZGluZzt2YXIgdj0zRHUu
cGx1Z2lucy5jdXJzb3I7dmFyIHQ9M0R2Ll90b29sdGlwRWxlbT0KO3N3aXRjaCh2LnRvb2x0aXBM
b2NhdGlvbil7Y2FzZSJudyI6dmFyIHI9M0RzLmxlZnQrdi50b29sdGlwT2Zmc2V0O3ZhciBxPTNE
PQpzLnRvcCt2LnRvb2x0aXBPZmZzZXQ7dC5jc3MoImxlZnQiLHIpO3QuY3NzKCJ0b3AiLHEpO2Jy
ZWFrO2Nhc2UibiI6dmFyIHI9M0Q9CihzLmxlZnQrKHUuX3Bsb3REaW1lbnNpb25zLndpZHRoLXMu
cmlnaHQpKS8yLXQub3V0ZXJXaWR0aCh0cnVlKS8yO3ZhciBxPTNEcz0KLnRvcCt2LnRvb2x0aXBP
ZmZzZXQ7dC5jc3MoImxlZnQiLHIpO3QuY3NzKCJ0b3AiLHEpO2JyZWFrO2Nhc2UibmUiOnZhciBy
PTNEPQpzLnJpZ2h0K3YudG9vbHRpcE9mZnNldDt2YXIgcT0zRHMudG9wK3YudG9vbHRpcE9mZnNl
dDt0LmNzcyh7cmlnaHQ6cix0b3A6cX09Cik7YnJlYWs7Y2FzZSJlIjp2YXIgcj0zRHMucmlnaHQr
di50b29sdGlwT2Zmc2V0O3ZhciBxPTNEKHMudG9wKyh1Ll9wbG90RGltZT0KbnNpb25zLmhlaWdo
dC1zLmJvdHRvbSkpLzItdC5vdXRlckhlaWdodCh0cnVlKS8yO3QuY3NzKHtyaWdodDpyLHRvcDpx
fSk7YnJlPQphaztjYXNlInNlIjp2YXIgcj0zRHMucmlnaHQrdi50b29sdGlwT2Zmc2V0O3ZhciBx
PTNEcy5ib3R0b20rdi50b29sdGlwT2Zmc2U9CnQ7dC5jc3Moe3JpZ2h0OnIsYm90dG9tOnF9KTti
cmVhaztjYXNlInMiOnZhciByPTNEKHMubGVmdCsodS5fcGxvdERpbWVuc2lvbj0Kcy53aWR0aC1z
LnJpZ2h0KSkvMi10Lm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgcT0zRHMuYm90dG9tK3YudG9vbHRp
cE9mZnNldDt0PQouY3NzKHtsZWZ0OnIsYm90dG9tOnF9KTticmVhaztjYXNlInN3Ijp2YXIgcj0z
RHMubGVmdCt2LnRvb2x0aXBPZmZzZXQ7dmFyIHE9Cj0zRHMuYm90dG9tK3YudG9vbHRpcE9mZnNl
dDt0LmNzcyh7bGVmdDpyLGJvdHRvbTpxfSk7YnJlYWs7Y2FzZSJ3Ijp2YXIgcj0zRD0Kcy5sZWZ0
K3YudG9vbHRpcE9mZnNldDt2YXIgcT0zRChzLnRvcCsodS5fcGxvdERpbWVuc2lvbnMuaGVpZ2h0
LXMuYm90dG9tKSkvPQoyLXQub3V0ZXJIZWlnaHQodHJ1ZSkvMjt0LmNzcyh7bGVmdDpyLHRvcDpx
fSk7YnJlYWs7ZGVmYXVsdDp2YXIgcj0zRHMucmlnaHQ9Ci12LnRvb2x0aXBPZmZzZXQ7dmFyIHE9
M0RzLmJvdHRvbSt2LnRvb2x0aXBPZmZzZXQ7dC5jc3Moe3JpZ2h0OnIsYm90dG9tOnF9KT0KO2Jy
ZWFrfXQ9M0RudWxsfWZ1bmN0aW9uIGsocixxLHYsdSx0KXtyLnByZXZlbnREZWZhdWx0KCk7ci5z
dG9wSW1tZWRpYXRlUHJvPQpwYWdhdGlvbigpO3ZhciB3PTNEdC5wbHVnaW5zLmN1cnNvcjtpZih3
LmNsaWNrUmVzZXQpe3cucmVzZXRab29tKHQsdyl9dmFyIHM9Cj0zRHdpbmRvdy5nZXRTZWxlY3Rp
b247aWYoZG9jdW1lbnQuc2VsZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpe2RvYz0K
dW1lbnQuc2VsZWN0aW9uLmVtcHR5KCl9ZWxzZXtpZihzJiYhcygpLmlzQ29sbGFwc2VkKXtzKCku
Y29sbGFwc2UoKX19cmV0dXJuPQogZmFsc2V9ZnVuY3Rpb24gYyhyLHEsdix1LHQpe3IucHJldmVu
dERlZmF1bHQoKTtyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbig9Cik7dmFyIHc9M0R0LnBsdWdp
bnMuY3Vyc29yO2lmKHcuZGJsQ2xpY2tSZXNldCl7dy5yZXNldFpvb20odCx3KX12YXIgcz0zRHdp
bj0KZG93LmdldFNlbGVjdGlvbjtpZihkb2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVj
dGlvbi5lbXB0eSl7ZG9jdW1lbnQuPQpzZWxlY3Rpb24uZW1wdHkoKX1lbHNle2lmKHMmJiFzKCku
aXNDb2xsYXBzZWQpe3MoKS5jb2xsYXBzZSgpfX1yZXR1cm4gZmFsc2U9Cn1mdW5jdGlvbiBmKHcs
dCxxLHosdSl7dmFyIHY9M0R1LnBsdWdpbnMuY3Vyc29yO3Yub25HcmlkPTNEZmFsc2U7aWYodi5z
aG93KT0Ke2oody50YXJnZXQpLmNzcygiY3Vyc29yIix2LnByZXZpb3VzQ3Vyc29yKTtpZih2LnNo
b3dUb29sdGlwJiYhKHYuX3pvb20uem9vPQptaW5nJiZ2LnNob3dUb29sdGlwT3V0c2lkZVpvb20m
JiF2LmNvbnN0cmFpbk91dHNpZGVab29tKSl7di5fdG9vbHRpcEVsZW0uZW09CnB0eSgpO3YuX3Rv
b2x0aXBFbGVtLmhpZGUoKX1pZih2Lnpvb20pe3YuX3pvb20uZ3JpZHBvcz0zRHQ7di5fem9vbS5k
YXRhcG9zPQo9M0RxfWlmKHYuc2hvd1ZlcnRpY2FsTGluZXx8di5zaG93SG9yaXpvbnRhbExpbmUp
e3ZhciBCPTNEdi5jdXJzb3JDYW52YXMuX2M9CnR4O0IuY2xlYXJSZWN0KDAsMCxCLmNhbnZhcy53
aWR0aCxCLmNhbnZhcy5oZWlnaHQpO0I9M0RudWxsfWlmKHYuc2hvd0N1cnNvcj0KTGVnZW5kKXt2
YXIgQT0zRGoodS50YXJnZXRJZCsiIHRkLmpxcGxvdC1jdXJzb3ItbGVnZW5kLWxhYmVsIik7Zm9y
KHZhciBzPTNEPQowO3M8QS5sZW5ndGg7cysrKXt2YXIgeT0zRGooQVtzXSkuZGF0YSgic2VyaWVz
SW5kZXgiKTt2YXIgcj0zRHUuc2VyaWVzW3ldO3Y9CmFyIHg9M0RyLmxhYmVsLnRvU3RyaW5nKCk7
aWYodS5sZWdlbmQuZXNjYXBlSHRtbCl7aihBW3NdKS50ZXh0KGouanFwbG90LnNwcj0KaW50Zih2
LmN1cnNvckxlZ2VuZEZvcm1hdFN0cmluZyx4LHVuZGVmaW5lZCx1bmRlZmluZWQpKX1lbHNle2oo
QVtzXSkuaHRtbChqPQouanFwbG90LnNwcmludGYodi5jdXJzb3JMZWdlbmRGb3JtYXRTdHJpbmcs
eCx1bmRlZmluZWQsdW5kZWZpbmVkKSl9fX19fWZ1bmM9CnRpb24gYihyLHEsdSx0LHMpe3ZhciB2
PTNEcy5wbHVnaW5zLmN1cnNvcjt2Lm9uR3JpZD0zRHRydWU7aWYodi5zaG93KXt2LnByZT0Kdmlv
dXNDdXJzb3I9M0RyLnRhcmdldC5zdHlsZS5jdXJzb3I7ci50YXJnZXQuc3R5bGUuY3Vyc29yPTNE
di5zdHlsZTtpZih2LnNoPQpvd1Rvb2x0aXApe2UocSx1LHMpO2lmKHYuZm9sbG93TW91c2Upe24o
cSxzKX1lbHNle20ocyl9di5fdG9vbHRpcEVsZW0uc2hvdyg9Cil9aWYodi5zaG93VmVydGljYWxM
aW5lfHx2LnNob3dIb3Jpem9udGFsTGluZSl7ZyhxLHMpfX19ZnVuY3Rpb24gaShyLHEsdSx0LD0K
cyl7dmFyIHY9M0RzLnBsdWdpbnMuY3Vyc29yO2lmKHYuc2hvdyl7aWYodi5zaG93VG9vbHRpcCl7
ZShxLHUscyk7aWYodi5mb2xsPQpvd01vdXNlKXtuKHEscyl9fWlmKHYuc2hvd1ZlcnRpY2FsTGlu
ZXx8di5zaG93SG9yaXpvbnRhbExpbmUpe2cocSxzKX19fWZ1bmM9CnRpb24gbyh5KXt2YXIgeD0z
RHkuZGF0YS5wbG90O3ZhciB0PTNEeC5ldmVudENhbnZhcy5fZWxlbS5vZmZzZXQoKTt2YXIgdz0z
RD0Ke3g6eS5wYWdlWC10LmxlZnQseTp5LnBhZ2VZLXQudG9wfTt2YXIgdT0zRHt4YXhpczpudWxs
LHlheGlzOm51bGwseDJheGlzOm51PQpsbCx5MmF4aXM6bnVsbCx5M2F4aXM6bnVsbCx5NGF4aXM6
bnVsbCx5NWF4aXM6bnVsbCx5NmF4aXM6bnVsbCx5N2F4aXM6bnVsbCw9Cnk4YXhpczpudWxsLHk5
YXhpczpudWxsLHlNaWRBeGlzOm51bGx9O3ZhciB2PTNEWyJ4YXhpcyIsInlheGlzIiwieDJheGlz
IiwieT0KMmF4aXMiLCJ5M2F4aXMiLCJ5NGF4aXMiLCJ5NWF4aXMiLCJ5NmF4aXMiLCJ5N2F4aXMi
LCJ5OGF4aXMiLCJ5OWF4aXMiLCJ5TWlkPQpBeGlzIl07dmFyIHE9M0R4LmF4ZXM7dmFyIHIscztm
b3Iocj0zRDExO3I+MDtyLS0pe3M9M0R2W3ItMV07aWYocVtzXS5zaG93KXs9CnVbc109M0RxW3Nd
LnNlcmllc19wMnUod1tzLmNoYXJBdCgwKV0pfX1yZXR1cm57b2Zmc2V0czp0LGdyaWRQb3M6dyxk
YXRhUG9zOj0KdX19ZnVuY3Rpb24gaCh6KXt2YXIgeD0zRHouZGF0YS5wbG90O3ZhciB5PTNEeC5w
bHVnaW5zLmN1cnNvcjtpZih5LnNob3cmJnkuPQp6b29tJiZ5Ll96b29tLnN0YXJ0ZWQmJiF5Lnpv
b21UYXJnZXQpe3oucHJldmVudERlZmF1bHQoKTt2YXIgQj0zRHkuem9vbUNhbnY9CmFzLl9jdHg7
dmFyIHY9M0RvKHopO3ZhciB3PTNEdi5ncmlkUG9zO3ZhciB0PTNEdi5kYXRhUG9zO3kuX3pvb20u
Z3JpZHBvcz0zRD0Kdzt5Ll96b29tLmRhdGFwb3M9M0R0O3kuX3pvb20uem9vbWluZz0zRHRydWU7
dmFyIHU9M0R3Lng7dmFyIHM9M0R3Lnk7dmFyIEE9Cj0zREIuY2FudmFzLmhlaWdodDt2YXIgcT0z
REIuY2FudmFzLndpZHRoO2lmKHkuc2hvd1Rvb2x0aXAmJiF5Lm9uR3JpZCYmeS5zaD0Kb3dUb29s
dGlwT3V0c2lkZVpvb20pe2Uodyx0LHgpO2lmKHkuZm9sbG93TW91c2Upe24odyx4KX19aWYoeS5j
b25zdHJhaW5ab29tPQpUbz0zRD0zRCJ4Iil7eS5fem9vbS5lbmQ9M0RbdSxBXX1lbHNle2lmKHku
Y29uc3RyYWluWm9vbVRvPTNEPTNEInkiKXt5Ll96b289Cm0uZW5kPTNEW3Esc119ZWxzZXt5Ll96
b29tLmVuZD0zRFt1LHNdfX12YXIgcj0zRHdpbmRvdy5nZXRTZWxlY3Rpb247aWYoZG9jdT0KbWVu
dC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSl7ZG9jdW1lbnQuc2VsZWN0aW9u
LmVtcHR5KCl9ZWxzZXtpPQpmKHImJiFyKCkuaXNDb2xsYXBzZWQpe3IoKS5jb2xsYXBzZSgpfX1s
LmNhbGwoeSk7Qj0zRG51bGx9fWZ1bmN0aW9uIGEodyxzLHI9Cix4LHQpe3ZhciB2PTNEdC5wbHVn
aW5zLmN1cnNvcjtpZih0LnBsdWdpbnMubW9iaWxlKXtqKGRvY3VtZW50KS5vbmUoInZtb3VzZT0K
dXAuanFwbG90X2N1cnNvciIse3Bsb3Q6dH0scCl9ZWxzZXtqKGRvY3VtZW50KS5vbmUoIm1vdXNl
dXAuanFwbG90X2N1cnNvciIsPQp7cGxvdDp0fSxwKX12YXIgdT0zRHQuYXhlcztpZihkb2N1bWVu
dC5vbnNlbGVjdHN0YXJ0IT0zRHVuZGVmaW5lZCl7di5fb2xkSGE9Cm5kbGVycy5vbnNlbGVjdHN0
YXJ0PTNEZG9jdW1lbnQub25zZWxlY3RzdGFydDtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PTNEZnVu
Yz0KdGlvbigpe3JldHVybiBmYWxzZX19aWYoZG9jdW1lbnQub25kcmFnIT0zRHVuZGVmaW5lZCl7
di5fb2xkSGFuZGxlcnMub25kcmFnPQo9M0Rkb2N1bWVudC5vbmRyYWc7ZG9jdW1lbnQub25kcmFn
PTNEZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9fWlmKGRvY3VtZW50Lm89Cm5tb3VzZWRvd24hPTNE
dW5kZWZpbmVkKXt2Ll9vbGRIYW5kbGVycy5vbm1vdXNlZG93bj0zRGRvY3VtZW50Lm9ubW91c2Vk
b3duOz0KZG9jdW1lbnQub25tb3VzZWRvd249M0RmdW5jdGlvbigpe3JldHVybiBmYWxzZX19aWYo
di56b29tKXtpZighdi56b29tUHJveHkpPQp7dmFyIHk9M0R2Lnpvb21DYW52YXMuX2N0eDt5LmNs
ZWFyUmVjdCgwLDAseS5jYW52YXMud2lkdGgseS5jYW52YXMuaGVpZ2h0KTs9Cnk9M0RudWxsfWlm
KHYuY29uc3RyYWluWm9vbVRvPTNEPTNEIngiKXt2Ll96b29tLnN0YXJ0PTNEW3MueCwwXX1lbHNl
e2lmKHYuYz0Kb25zdHJhaW5ab29tVG89M0Q9M0QieSIpe3YuX3pvb20uc3RhcnQ9M0RbMCxzLnld
fWVsc2V7di5fem9vbS5zdGFydD0zRFtzLngsPQpzLnldfX12Ll96b29tLnN0YXJ0ZWQ9M0R0cnVl
O2Zvcih2YXIgcSBpbiByKXt2Ll96b29tLmF4ZXMuc3RhcnRbcV09M0RyW3FdfWk9CmYodC5wbHVn
aW5zLm1vYmlsZSl7aihkb2N1bWVudCkuYmluZCgidm1vdXNlbW92ZS5qcXBsb3RDdXJzb3IiLHtw
bG90OnR9LGgpfT0KZWxzZXtqKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuanFwbG90Q3Vyc29y
Iix7cGxvdDp0fSxoKX19fWZ1bmN0aW9uIHAoeSl7PQp2YXIgdj0zRHkuZGF0YS5wbG90O3ZhciB4
PTNEdi5wbHVnaW5zLmN1cnNvcjtpZih4Lnpvb20mJnguX3pvb20uem9vbWluZyYmIXg9Ci56b29t
VGFyZ2V0KXt2YXIgdT0zRHguX3pvb20uZ3JpZHBvcy54O3ZhciByPTNEeC5fem9vbS5ncmlkcG9z
Lnk7dmFyIHQ9M0R4Lj0KX3pvb20uZGF0YXBvczt2YXIgej0zRHguem9vbUNhbnZhcy5fY3R4LmNh
bnZhcy5oZWlnaHQ7dmFyIHE9M0R4Lnpvb21DYW52YXMuPQpfY3R4LmNhbnZhcy53aWR0aDt2YXIg
dz0zRHYuYXhlcztpZih4LmNvbnN0cmFpbk91dHNpZGVab29tJiYheC5vbkdyaWQpe2lmKHU9Cjww
KXt1PTNEMH1lbHNle2lmKHU+cSl7dT0zRHF9fWlmKHI8MCl7cj0zRDB9ZWxzZXtpZihyPnope3I9
M0R6fX1mb3IodmFyIHMgaT0KbiB0KXtpZih0W3NdKXtpZihzLmNoYXJBdCgwKT0zRD0zRCJ4Iil7
dFtzXT0zRHdbc10uc2VyaWVzX3AydSh1KX1lbHNle3Rbc109Cj0zRHdbc10uc2VyaWVzX3AydShy
KX19fX1pZih4LmNvbnN0cmFpblpvb21Ubz0zRD0zRCJ4Iil7cj0zRHp9ZWxzZXtpZih4LmNvbj0K
c3RyYWluWm9vbVRvPTNEPTNEInkiKXt1PTNEcX19eC5fem9vbS5lbmQ9M0RbdSxyXTt4Ll96b29t
LmdyaWRwb3M9M0R7eDp1LHk6PQpyfTt4LmRvWm9vbSh4Ll96b29tLmdyaWRwb3MsdCx2LHgpfXgu
X3pvb20uc3RhcnRlZD0zRGZhbHNlO3guX3pvb20uem9vbWluZz0KPTNEZmFsc2U7aihkb2N1bWVu
dCkudW5iaW5kKCJtb3VzZW1vdmUuanFwbG90Q3Vyc29yIixoKTtpZihkb2N1bWVudC5vbnNlbGVj
PQp0c3RhcnQhPTNEdW5kZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbnNlbGVjdHN0YXJ0IT0zRG51
bGwpe2RvY3VtZW50Lm9uc2VsZWM9CnRzdGFydD0zRHguX29sZEhhbmRsZXJzLm9uc2VsZWN0c3Rh
cnQ7eC5fb2xkSGFuZGxlcnMub25zZWxlY3RzdGFydD0zRG51bGx9aT0KZihkb2N1bWVudC5vbmRy
YWchPTNEdW5kZWZpbmVkJiZ4Ll9vbGRIYW5kbGVycy5vbmRyYWchPTNEbnVsbCl7ZG9jdW1lbnQu
b25kPQpyYWc9M0R4Ll9vbGRIYW5kbGVycy5vbmRyYWc7eC5fb2xkSGFuZGxlcnMub25kcmFnPTNE
bnVsbH1pZihkb2N1bWVudC5vbm1vdXM9CmVkb3duIT0zRHVuZGVmaW5lZCYmeC5fb2xkSGFuZGxl
cnMub25tb3VzZWRvd24hPTNEbnVsbCl7ZG9jdW1lbnQub25tb3VzZWRvdz0Kbj0zRHguX29sZEhh
bmRsZXJzLm9ubW91c2Vkb3duO3guX29sZEhhbmRsZXJzLm9ubW91c2Vkb3duPTNEbnVsbH19ZnVu
Y3Rpb24gPQpsKCl7dmFyIHk9M0R0aGlzLl96b29tLnN0YXJ0O3ZhciB1PTNEdGhpcy5fem9vbS5l
bmQ7dmFyIHM9M0R0aGlzLnpvb21DYW52YXM9Ci5fY3R4O3ZhciByLHYseCxxO2lmKHVbMF0+eVsw
XSl7cj0zRHlbMF07cT0zRHVbMF0teVswXX1lbHNle3I9M0R1WzBdO3E9M0R5Wz0KMF0tdVswXX1p
Zih1WzFdPnlbMV0pe3Y9M0R5WzFdO3g9M0R1WzFdLXlbMV19ZWxzZXt2PTNEdVsxXTt4PTNEeVsx
XS11WzFdfXMuPQpmaWxsU3R5bGU9M0QicmdiYSgwLDAsMCwwLjIpIjtzLnN0cm9rZVN0eWxlPTNE
IiM5OTk5OTkiO3MubGluZVdpZHRoPTNEMTtzLmM9CmxlYXJSZWN0KDAsMCxzLmNhbnZhcy53aWR0
aCxzLmNhbnZhcy5oZWlnaHQpO3MuZmlsbFJlY3QoMCwwLHMuY2FudmFzLndpZHRoLD0Kcy5jYW52
YXMuaGVpZ2h0KTtzLmNsZWFyUmVjdChyLHYscSx4KTtzLnN0cm9rZVJlY3Qocix2LHEseCk7cz0z
RG51bGx9ai5qcXBsPQpvdC5DdXJzb3JMZWdlbmRSZW5kZXJlcj0zRGZ1bmN0aW9uKHEpe2ouanFw
bG90LlRhYmxlTGVnZW5kUmVuZGVyZXIuY2FsbCh0aGk9CnMscSk7dGhpcy5mb3JtYXRTdHJpbmc9
M0QiJXMifTtqLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlci5wcm90b3R5cGU9M0RuZT0KdyBq
LmpxcGxvdC5UYWJsZUxlZ2VuZFJlbmRlcmVyKCk7ai5qcXBsb3QuQ3Vyc29yTGVnZW5kUmVuZGVy
ZXIucHJvdG90eXBlLmNvPQpuc3RydWN0b3I9M0RqLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJl
cjtqLmpxcGxvdC5DdXJzb3JMZWdlbmRSZW5kZXJlci5wcm89CnRvdHlwZS5kcmF3PTNEZnVuY3Rp
b24oKXtpZih0aGlzLl9lbGVtKXt0aGlzLl9lbGVtLmVtcHR5Rm9yY2UoKTt0aGlzLl9lbGVtPQo9
M0RudWxsfWlmKHRoaXMuc2hvdyl7dmFyIHc9M0R0aGlzLl9zZXJpZXMsQTt2YXIgcj0zRGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQ9CigidGFibGUiKTt0aGlzLl9lbGVtPTNEaihyKTtyPTNEbnVsbDt0
aGlzLl9lbGVtLmFkZENsYXNzKCJqcXBsb3QtbGVnZW5kIGpxcD0KbG90LWN1cnNvci1sZWdlbmQi
KTt0aGlzLl9lbGVtLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3ZhciBxPTNEZmFsc2U7Zm9y
PQoodmFyIHg9M0QwO3g8dy5sZW5ndGg7eCsrKXtBPTNEd1t4XTtpZihBLnNob3cmJkEuc2hvd0xh
YmVsKXt2YXIgdj0zRGouanFwbG89CnQuc3ByaW50Zih0aGlzLmZvcm1hdFN0cmluZyxBLmxhYmVs
LnRvU3RyaW5nKCkpO2lmKHYpe3ZhciB0PTNEQS5jb2xvcjtpZihBLj0KX3N0YWNrJiYhQS5maWxs
KXt0PTNEIiJ9ei5jYWxsKHRoaXMsdix0LHEseCk7cT0zRHRydWV9Zm9yKHZhciB1PTNEMDt1PGou
anFwPQpsb3QuYWRkTGVnZW5kUm93SG9va3MubGVuZ3RoO3UrKyl7dmFyIHk9M0RqLmpxcGxvdC5h
ZGRMZWdlbmRSb3dIb29rc1t1XS5jYWw9CmwodGhpcyxBKTtpZih5KXt6LmNhbGwodGhpcyx5Lmxh
YmVsLHkuY29sb3IscSk7cT0zRHRydWV9fX19dz0zREE9M0RudWxsO2RlbD0KZXRlIHc7ZGVsZXRl
IEF9ZnVuY3Rpb24geihELEMsRixzKXt2YXIgQj0zRChGKT90aGlzLnJvd1NwYWNpbmc6IjAiO3Zh
ciBFPTNEPQpqKCc8dHIgY2xhc3M9M0QianFwbG90LWxlZ2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2Vu
ZCI+PC90cj4nKS5hcHBlbmRUbyh0aGlzLl89CmVsZW0pO0UuZGF0YSgic2VyaWVzSW5kZXgiLHMp
O2ooJzx0ZCBjbGFzcz0zRCJqcXBsb3QtbGVnZW5kIGpxcGxvdC1jdXJzb3ItbD0KZWdlbmQtc3dh
dGNoIiBzdHlsZT0zRCJwYWRkaW5nLXRvcDonK0IrJzsiPjxkaXYgc3R5bGU9M0QiYm9yZGVyOjFw
eCBzb2xpZCAjPQpjY2NjY2M7cGFkZGluZzowLjJlbTsiPjxkaXYgY2xhc3M9M0QianFwbG90LWN1
cnNvci1sZWdlbmQtc3dhdGNoIiBzdHlsZT0zRCI9CmJhY2tncm91bmQtY29sb3I6JytDKyc7Ij48
L2Rpdj48L2Rpdj48L3RkPicpLmFwcGVuZFRvKEUpO3ZhciBHPTNEaignPHRkIGNsYT0Kc3M9M0Qi
anFwbG90LWxlZ2VuZCBqcXBsb3QtY3Vyc29yLWxlZ2VuZC1sYWJlbCIgc3R5bGU9M0QidmVydGlj
YWwtYWxpZ246bWlkPQpkbGU7cGFkZGluZy10b3A6JytCKyc7Ij48L3RkPicpO0cuYXBwZW5kVG8o
RSk7Ry5kYXRhKCJzZXJpZXNJbmRleCIscyk7aWYodGg9CmlzLmVzY2FwZUh0bWwpe0cudGV4dChE
KX1lbHNle0cuaHRtbChEKX1FPTNEbnVsbDtHPTNEbnVsbH1yZXR1cm4gdGhpcy5fZWxlbT0KfX0p
KGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBkYjkyZjZlMTli
MzgxODA5N2JkM2Q1YTE0OWFjZjgwY2VkOTA2NzVjIC1yIGEwZDFhOTFlMDViZWUzMmRkNWYyZmFj
PQo5M2Q4MGZiZTkzNWJhOGMyOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMv
c3RhdGljL3BsdWdpbnMvanFwbG89CnQvcGx1Z2lucy9qcXBsb3QuaGlnaGxpZ2h0ZXIubWluLmpz
Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRz
L3N0YXRpYy9wbHVnaW5zL2pxcGxvdC9wbHVnaW5zL2pxPQpwbG90LmhpZ2hsaWdodGVyLm1pbi5q
cwpAQCAtMCwwICsxLDMgQEAKKy8qIGpxUGxvdCAxLjAuOHIxMjUwIHwgKGMpIDIwMDktMjAxMyBD
aHJpcyBMZW9uZWxsbyB8IGpwbG90LmNvbQorICAganNEYXRlIHwgKGMpIDIwMTAtMjAxMyBDaHJp
cyBMZW9uZWxsbworICovKGZ1bmN0aW9uKGQpe2QuanFwbG90LmV2ZW50TGlzdGVuZXJIb29rcy5w
dXNoKFsianFwbG90TW91c2VNb3ZlIixmXSk7ZC49CmpxcGxvdC5IaWdobGlnaHRlcj0zRGZ1bmN0
aW9uKGgpe3RoaXMuc2hvdz0zRGQuanFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zOz0KdGhpcy5t
YXJrZXJSZW5kZXJlcj0zRG5ldyBkLmpxcGxvdC5NYXJrZXJSZW5kZXJlcih7c2hhZG93OmZhbHNl
fSk7dGhpcy5zaG93PQpNYXJrZXI9M0R0cnVlO3RoaXMubGluZVdpZHRoQWRqdXN0PTNEMi41O3Ro
aXMuc2l6ZUFkanVzdD0zRDU7dGhpcy5zaG93VG9vbHQ9CmlwPTNEdHJ1ZTt0aGlzLnRvb2x0aXBM
b2NhdGlvbj0zRCJudyI7dGhpcy5mYWRlVG9vbHRpcD0zRHRydWU7dGhpcy50b29sdGlwRj0KYWRl
U3BlZWQ9M0QiZmFzdCI7dGhpcy50b29sdGlwT2Zmc2V0PTNEMjt0aGlzLnRvb2x0aXBBeGVzPTNE
ImJvdGgiO3RoaXMudG9vPQpsdGlwU2VwYXJhdG9yPTNEIiwgIjt0aGlzLnRvb2x0aXBDb250ZW50
RWRpdG9yPTNEbnVsbDt0aGlzLnVzZUF4ZXNGb3JtYXR0ZXI9CnM9M0R0cnVlO3RoaXMudG9vbHRp
cEZvcm1hdFN0cmluZz0zRCIlLjVQIjt0aGlzLmZvcm1hdFN0cmluZz0zRG51bGw7dGhpcy55dj0K
YWx1ZXM9M0QxO3RoaXMuYnJpbmdTZXJpZXNUb0Zyb250PTNEZmFsc2U7dGhpcy5fdG9vbHRpcEVs
ZW07dGhpcy5pc0hpZ2hsaWdoPQp0aW5nPTNEZmFsc2U7dGhpcy5jdXJyZW50TmVpZ2hib3I9M0Ru
dWxsO2QuZXh0ZW5kKHRydWUsdGhpcyxoKX07dmFyIGI9M0RbIm49CnciLCJuIiwibmUiLCJlIiwi
c2UiLCJzIiwic3ciLCJ3Il07dmFyIGU9M0R7bnc6MCxuOjEsbmU6MixlOjMsc2U6NCxzOjUsc3c6
Nj0KLHc6N307dmFyIGM9M0RbInNlIiwicyIsInN3IiwidyIsIm53IiwibiIsIm5lIiwiZSJdO2Qu
anFwbG90LkhpZ2hsaWdodGVyLmluPQppdD0zRGZ1bmN0aW9uKGssaixpKXt2YXIgaD0zRGl8fHt9
O3RoaXMucGx1Z2lucy5oaWdobGlnaHRlcj0zRG5ldyBkLmpxcGxvdC49CkhpZ2hsaWdodGVyKGgu
aGlnaGxpZ2h0ZXIpfTtkLmpxcGxvdC5IaWdobGlnaHRlci5wYXJzZU9wdGlvbnM9M0RmdW5jdGlv
bihpLD0KaCl7dGhpcy5zaG93SGlnaGxpZ2h0PTNEdHJ1ZX07ZC5qcXBsb3QuSGlnaGxpZ2h0ZXIu
cG9zdFBsb3REcmF3PTNEZnVuY3Rpb24oPQope2lmKHRoaXMucGx1Z2lucy5oaWdobGlnaHRlciYm
dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdodENhbnZhcyl7dGg9CmlzLnBsdWdpbnMu
aGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0Q2FudmFzLnJlc2V0Q2FudmFzKCk7dGhpcy5wbHVnaW5zLmhp
Z2hsaWdodD0KZXIuaGlnaGxpZ2h0Q2FudmFzPTNEbnVsbH1pZih0aGlzLnBsdWdpbnMuaGlnaGxp
Z2h0ZXImJnRoaXMucGx1Z2lucy5oaWdobGlnPQpodGVyLl90b29sdGlwRWxlbSl7dGhpcy5wbHVn
aW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWxlbS5lbXB0eUZvcmNlKCk7dGhpcy49CnBsdWdpbnMu
aGlnaGxpZ2h0ZXIuX3Rvb2x0aXBFbGVtPTNEbnVsbH10aGlzLnBsdWdpbnMuaGlnaGxpZ2h0ZXIu
aGlnaGxpZ2h0Qz0KYW52YXM9M0RuZXcgZC5qcXBsb3QuR2VuZXJpY0NhbnZhcygpO3RoaXMuZXZl
bnRDYW52YXMuX2VsZW0uYmVmb3JlKHRoaXMucGx1PQpnaW5zLmhpZ2hsaWdodGVyLmhpZ2hsaWdo
dENhbnZhcy5jcmVhdGVFbGVtZW50KHRoaXMuX2dyaWRQYWRkaW5nLCJqcXBsb3QtaGk9CmdobGln
aHQtY2FudmFzIix0aGlzLl9wbG90RGltZW5zaW9ucyx0aGlzKSk7dGhpcy5wbHVnaW5zLmhpZ2hs
aWdodGVyLmhpZ2hsaT0KZ2h0Q2FudmFzLnNldENvbnRleHQoKTt2YXIgaD0zRGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMucGx1Z2lucy5oPQppZ2hsaWdodGVyLl90b29sdGlwRWxl
bT0zRGQoaCk7aD0zRG51bGw7dGhpcy5wbHVnaW5zLmhpZ2hsaWdodGVyLl90b29sdGlwRWw9CmVt
LmFkZENsYXNzKCJqcXBsb3QtaGlnaGxpZ2h0ZXItdG9vbHRpcCIpO3RoaXMucGx1Z2lucy5oaWdo
bGlnaHRlci5fdG9vbHRpcD0KRWxlbS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToi
bm9uZSJ9KTt0aGlzLmV2ZW50Q2FudmFzLl9lbGVtLmJlZm9yPQplKHRoaXMucGx1Z2lucy5oaWdo
bGlnaHRlci5fdG9vbHRpcEVsZW0pfTtkLmpxcGxvdC5wcmVJbml0SG9va3MucHVzaChkLmpxcGw9
Cm90LkhpZ2hsaWdodGVyLmluaXQpO2QuanFwbG90LnByZVBhcnNlU2VyaWVzT3B0aW9uc0hvb2tz
LnB1c2goZC5qcXBsb3QuSGlnaD0KbGlnaHRlci5wYXJzZU9wdGlvbnMpO2QuanFwbG90LnBvc3RE
cmF3SG9va3MucHVzaChkLmpxcGxvdC5IaWdobGlnaHRlci5wb3N0PQpQbG90RHJhdyk7ZnVuY3Rp
b24gYShtLG8pe3ZhciBqPTNEbS5wbHVnaW5zLmhpZ2hsaWdodGVyO3ZhciBwPTNEbS5zZXJpZXNb
by49CnNlcmllc0luZGV4XTt2YXIgaD0zRHAubWFya2VyUmVuZGVyZXI7dmFyIGk9M0RqLm1hcmtl
clJlbmRlcmVyO2kuc3R5bGU9M0RoLj0Kc3R5bGU7aS5saW5lV2lkdGg9M0RoLmxpbmVXaWR0aCtq
LmxpbmVXaWR0aEFkanVzdDtpLnNpemU9M0RoLnNpemUrai5zaXplQWRqPQp1c3Q7dmFyIGw9M0Rk
LmpxcGxvdC5nZXRDb2xvckNvbXBvbmVudHMoaC5jb2xvcik7dmFyIG49M0RbbFswXSxsWzFdLGxb
Ml1dO3Y9CmFyIGs9M0QobFszXT49M0QwLjYpP2xbM10qMC42OmxbM10qKDItbFszXSk7aS5jb2xv
cj0zRCJyZ2JhKCIrblswXSsiLCIrblsxXT0KKyIsIituWzJdKyIsIitrKyIpIjtpLmluaXQoKTtp
LmRyYXcocC5ncmlkRGF0YVtvLnBvaW50SW5kZXhdWzBdLHAuZ3JpZERhdGFbPQpvLnBvaW50SW5k
ZXhdWzFdLGouaGlnaGxpZ2h0Q2FudmFzLl9jdHgpfWZ1bmN0aW9uIGcoQSxxLG0pe3ZhciBrPTNE
QS5wbHVnaW49CnMuaGlnaGxpZ2h0ZXI7dmFyIEQ9M0RrLl90b29sdGlwRWxlbTt2YXIgcj0zRHEu
aGlnaGxpZ2h0ZXJ8fHt9O3ZhciB0PTNEZC5leD0KdGVuZCh0cnVlLHt9LGsscik7aWYodC51c2VB
eGVzRm9ybWF0dGVycyl7dmFyIHc9M0RxLl94YXhpcy5fdGlja3NbMF0uZm9ybWF0PQp0ZXI7dmFy
IGg9M0RxLl95YXhpcy5fdGlja3NbMF0uZm9ybWF0dGVyO3ZhciBFPTNEcS5feGF4aXMuX3RpY2tz
WzBdLmZvcm1hdFM9CnRyaW5nO3ZhciBzPTNEcS5feWF4aXMuX3RpY2tzWzBdLmZvcm1hdFN0cmlu
Zzt2YXIgejt2YXIgdT0zRHcoRSxtLmRhdGFbMF0pOz0KdmFyIGw9M0RbXTtmb3IodmFyIEI9M0Qx
O0I8dC55dmFsdWVzKzE7QisrKXtsLnB1c2goaChzLG0uZGF0YVtCXSkpfWlmKHR5cGVvPQpmIHQu
Zm9ybWF0U3RyaW5nPTNEPTNEPTNEInN0cmluZyIpe3N3aXRjaCh0LnRvb2x0aXBBeGVzKXtjYXNl
ImJvdGgiOmNhc2UieHk9CiI6bC51bnNoaWZ0KHUpO2wudW5zaGlmdCh0LmZvcm1hdFN0cmluZyk7
ej0zRGQuanFwbG90LnNwcmludGYuYXBwbHkoZC5qcXBsbz0KdC5zcHJpbnRmLGwpO2JyZWFrO2Nh
c2UieXgiOmwucHVzaCh1KTtsLnVuc2hpZnQodC5mb3JtYXRTdHJpbmcpO3o9M0RkLmpxcGxvPQp0
LnNwcmludGYuYXBwbHkoZC5qcXBsb3Quc3ByaW50ZixsKTticmVhaztjYXNlIngiOno9M0RkLmpx
cGxvdC5zcHJpbnRmLmFwcGw9CnkoZC5qcXBsb3Quc3ByaW50ZixbdC5mb3JtYXRTdHJpbmcsdV0p
O2JyZWFrO2Nhc2UieSI6bC51bnNoaWZ0KHQuZm9ybWF0U3RyaT0KbmcpO3o9M0RkLmpxcGxvdC5z
cHJpbnRmLmFwcGx5KGQuanFwbG90LnNwcmludGYsbCk7YnJlYWs7ZGVmYXVsdDpsLnVuc2hpZnQo
PQp1KTtsLnVuc2hpZnQodC5mb3JtYXRTdHJpbmcpO3o9M0RkLmpxcGxvdC5zcHJpbnRmLmFwcGx5
KGQuanFwbG90LnNwcmludGYsbCk9CjticmVha319ZWxzZXtzd2l0Y2godC50b29sdGlwQXhlcyl7
Y2FzZSJib3RoIjpjYXNlInh5Ijp6PTNEdTtmb3IodmFyIEI9M0QwOz0KQjxsLmxlbmd0aDtCKysp
e3orPTNEdC50b29sdGlwU2VwYXJhdG9yK2xbQl19YnJlYWs7Y2FzZSJ5eCI6ej0zRCIiO2Zvcih2
YXIgPQpCPTNEMDtCPGwubGVuZ3RoO0IrKyl7eis9M0RsW0JdK3QudG9vbHRpcFNlcGFyYXRvcn16
Kz0zRHU7YnJlYWs7Y2FzZSJ4Ijp6PQo9M0R1O2JyZWFrO2Nhc2UieSI6ej0zRGwuam9pbih0LnRv
b2x0aXBTZXBhcmF0b3IpO2JyZWFrO2RlZmF1bHQ6ej0zRHU7Zm9yKHY9CmFyIEI9M0QwO0I8bC5s
ZW5ndGg7QisrKXt6Kz0zRHQudG9vbHRpcFNlcGFyYXRvcitsW0JdfWJyZWFrfX19ZWxzZXt2YXIg
ejtpZj0KKHR5cGVvZiB0LmZvcm1hdFN0cmluZz0zRD0zRD0zRCJzdHJpbmciKXt6PTNEZC5qcXBs
b3Quc3ByaW50Zi5hcHBseShkLmpxcGxvPQp0LnNwcmludGYsW3QuZm9ybWF0U3RyaW5nXS5jb25j
YXQobS5kYXRhKSl9ZWxzZXtpZih0LnRvb2x0aXBBeGVzPTNEPTNEImJvdGg9CiJ8fHQudG9vbHRp
cEF4ZXM9M0Q9M0QieHkiKXt6PTNEZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRTdHJp
bmcsbS5kYT0KdGFbMF0pK3QudG9vbHRpcFNlcGFyYXRvcitkLmpxcGxvdC5zcHJpbnRmKHQudG9v
bHRpcEZvcm1hdFN0cmluZyxtLmRhdGFbMV0pPQp9ZWxzZXtpZih0LnRvb2x0aXBBeGVzPTNEPTNE
Inl4Iil7ej0zRGQuanFwbG90LnNwcmludGYodC50b29sdGlwRm9ybWF0U3RyaW49CmcsbS5kYXRh
WzFdKSt0LnRvb2x0aXBTZXBhcmF0b3IrZC5qcXBsb3Quc3ByaW50Zih0LnRvb2x0aXBGb3JtYXRT
dHJpbmcsbS5kYT0KdGFbMF0pfWVsc2V7aWYodC50b29sdGlwQXhlcz0zRD0zRCJ4Iil7ej0zRGQu
anFwbG90LnNwcmludGYodC50b29sdGlwRm9ybWF0PQpTdHJpbmcsbS5kYXRhWzBdKX1lbHNle2lm
KHQudG9vbHRpcEF4ZXM9M0Q9M0QieSIpe3o9M0RkLmpxcGxvdC5zcHJpbnRmKHQudG89Cm9sdGlw
Rm9ybWF0U3RyaW5nLG0uZGF0YVsxXSl9fX19fX1pZihkLmlzRnVuY3Rpb24odC50b29sdGlwQ29u
dGVudEVkaXRvcikpez0Kej0zRHQudG9vbHRpcENvbnRlbnRFZGl0b3IoeixtLnNlcmllc0luZGV4
LG0ucG9pbnRJbmRleCxBKX1ELmh0bWwoeik7dmFyIEM9Cj0zRHt4Om0uZ3JpZERhdGFbMF0seTpt
LmdyaWREYXRhWzFdfTt2YXIgdj0zRDA7dmFyIGo9M0QwLjcwNztpZihxLm1hcmtlclJlbj0KZGVy
ZXIuc2hvdz0zRD0zRHRydWUpe3Y9M0QocS5tYXJrZXJSZW5kZXJlci5zaXplK3Quc2l6ZUFkanVz
dCkvMn12YXIgbz0zRGI7PQppZihxLmZpbGxUb1plcm8mJnEuZmlsbCYmbS5kYXRhWzFdPDApe289
M0RjfXN3aXRjaChvW2VbdC50b29sdGlwTG9jYXRpb25dXSk9CntjYXNlIm53Ijp2YXIgcD0zREMu
eCtBLl9ncmlkUGFkZGluZy5sZWZ0LUQub3V0ZXJXaWR0aCh0cnVlKS10LnRvb2x0aXBPZmZzZT0K
dC1qKnY7dmFyIG49M0RDLnkrQS5fZ3JpZFBhZGRpbmcudG9wLXQudG9vbHRpcE9mZnNldC1ELm91
dGVySGVpZ2h0KHRydWUpLWoqPQp2O2JyZWFrO2Nhc2UibiI6dmFyIHA9M0RDLngrQS5fZ3JpZFBh
ZGRpbmcubGVmdC1ELm91dGVyV2lkdGgodHJ1ZSkvMjt2YXIgbj0KPTNEQy55K0EuX2dyaWRQYWRk
aW5nLnRvcC10LnRvb2x0aXBPZmZzZXQtRC5vdXRlckhlaWdodCh0cnVlKS12O2JyZWFrO2Nhc2Ui
PQpuZSI6dmFyIHA9M0RDLngrQS5fZ3JpZFBhZGRpbmcubGVmdCt0LnRvb2x0aXBPZmZzZXQraip2
O3ZhciBuPTNEQy55K0EuX2dyaWQ9ClBhZGRpbmcudG9wLXQudG9vbHRpcE9mZnNldC1ELm91dGVy
SGVpZ2h0KHRydWUpLWoqdjticmVhaztjYXNlImUiOnZhciBwPTNEQz0KLngrQS5fZ3JpZFBhZGRp
bmcubGVmdCt0LnRvb2x0aXBPZmZzZXQrdjt2YXIgbj0zREMueStBLl9ncmlkUGFkZGluZy50b3At
RC5vPQp1dGVySGVpZ2h0KHRydWUpLzI7YnJlYWs7Y2FzZSJzZSI6dmFyIHA9M0RDLngrQS5fZ3Jp
ZFBhZGRpbmcubGVmdCt0LnRvb2x0aXA9Ck9mZnNldCtqKnY7dmFyIG49M0RDLnkrQS5fZ3JpZFBh
ZGRpbmcudG9wK3QudG9vbHRpcE9mZnNldCtqKnY7YnJlYWs7Y2FzZSJzIj0KOnZhciBwPTNEQy54
K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLzI7dmFyIG49M0RDLnkrQS5f
Z3JpZFBhPQpkZGluZy50b3ArdC50b29sdGlwT2Zmc2V0K3Y7YnJlYWs7Y2FzZSJzdyI6dmFyIHA9
M0RDLngrQS5fZ3JpZFBhZGRpbmcubGVmdC09CkQub3V0ZXJXaWR0aCh0cnVlKS10LnRvb2x0aXBP
ZmZzZXQtaip2O3ZhciBuPTNEQy55K0EuX2dyaWRQYWRkaW5nLnRvcCt0LnRvbz0KbHRpcE9mZnNl
dCtqKnY7YnJlYWs7Y2FzZSJ3Ijp2YXIgcD0zREMueCtBLl9ncmlkUGFkZGluZy5sZWZ0LUQub3V0
ZXJXaWR0aCh0PQpydWUpLXQudG9vbHRpcE9mZnNldC12O3ZhciBuPTNEQy55K0EuX2dyaWRQYWRk
aW5nLnRvcC1ELm91dGVySGVpZ2h0KHRydWUpLzI9CjticmVhaztkZWZhdWx0OnZhciBwPTNEQy54
K0EuX2dyaWRQYWRkaW5nLmxlZnQtRC5vdXRlcldpZHRoKHRydWUpLXQudG9vbHRpcD0KT2Zmc2V0
LWoqdjt2YXIgbj0zREMueStBLl9ncmlkUGFkZGluZy50b3AtdC50b29sdGlwT2Zmc2V0LUQub3V0
ZXJIZWlnaHQodHJ1PQplKS1qKnY7YnJlYWt9RC5jc3MoImxlZnQiLHApO0QuY3NzKCJ0b3AiLG4p
O2lmKHQuZmFkZVRvb2x0aXApe0Quc3RvcCh0cnVlLHQ9CnJ1ZSkuZmFkZUluKHQudG9vbHRpcEZh
ZGVTcGVlZCl9ZWxzZXtELnNob3coKX1EPTNEbnVsbH1mdW5jdGlvbiBmKG4saixpLHAsbD0KKXt2
YXIgaD0zRGwucGx1Z2lucy5oaWdobGlnaHRlcjt2YXIgbT0zRGwucGx1Z2lucy5jdXJzb3I7aWYo
aC5zaG93KXtpZihwPTNEPQo9M0RudWxsJiZoLmlzSGlnaGxpZ2h0aW5nKXt2YXIgbz0zRGpRdWVy
eS5FdmVudCgianFwbG90SGlnaGxpZ2h0ZXJVbmhpZ2hsaWc9Cmh0Iik7bC50YXJnZXQudHJpZ2dl
cihvKTt2YXIgcT0zRGguaGlnaGxpZ2h0Q2FudmFzLl9jdHg7cS5jbGVhclJlY3QoMCwwLHEuYz0K
YW52YXMud2lkdGgscS5jYW52YXMuaGVpZ2h0KTtpZihoLmZhZGVUb29sdGlwKXtoLl90b29sdGlw
RWxlbS5mYWRlT3V0KGgudG9vPQpsdGlwRmFkZVNwZWVkKX1lbHNle2guX3Rvb2x0aXBFbGVtLmhp
ZGUoKX1pZihoLmJyaW5nU2VyaWVzVG9Gcm9udCl7bC5yZXN0b3I9CmVQcmV2aW91c1Nlcmllc09y
ZGVyKCl9aC5pc0hpZ2hsaWdodGluZz0zRGZhbHNlO2guY3VycmVudE5laWdoYm9yPTNEbnVsbDtx
PQo9M0RudWxsfWVsc2V7aWYocCE9M0RudWxsJiZsLnNlcmllc1twLnNlcmllc0luZGV4XS5zaG93
SGlnaGxpZ2h0JiYhaC5pc0hpZ2g9CmxpZ2h0aW5nKXt2YXIgbz0zRGpRdWVyeS5FdmVudCgianFw
bG90SGlnaGxpZ2h0ZXJIaWdobGlnaHQiKTtvLndoaWNoPTNEbi53aD0KaWNoO28ucGFnZVg9M0Ru
LnBhZ2VYO28ucGFnZVk9M0RuLnBhZ2VZO3ZhciBrPTNEW3Auc2VyaWVzSW5kZXgscC5wb2ludElu
ZGV4PQoscC5kYXRhLGxdO2wudGFyZ2V0LnRyaWdnZXIobyxrKTtoLmlzSGlnaGxpZ2h0aW5nPTNE
dHJ1ZTtoLmN1cnJlbnROZWlnaGJvcj0KPTNEcDtpZihoLnNob3dNYXJrZXIpe2EobCxwKX1pZihs
LnNlcmllc1twLnNlcmllc0luZGV4XS5zaG93JiZoLnNob3dUb29sdGlwPQomJighbXx8IW0uX3pv
b20uc3RhcnRlZCkpe2cobCxsLnNlcmllc1twLnNlcmllc0luZGV4XSxwKX1pZihoLmJyaW5nU2Vy
aWVzVG89CkZyb250KXtsLm1vdmVTZXJpZXNUb0Zyb250KHAuc2VyaWVzSW5kZXgpfX1lbHNle2lm
KHAhPTNEbnVsbCYmaC5pc0hpZ2hsaWdodD0KaW5nJiZoLmN1cnJlbnROZWlnaGJvciE9M0RwKXtp
ZihsLnNlcmllc1twLnNlcmllc0luZGV4XS5zaG93SGlnaGxpZ2h0KXt2YXIgPQpxPTNEaC5oaWdo
bGlnaHRDYW52YXMuX2N0eDtxLmNsZWFyUmVjdCgwLDAscS5jYW52YXMud2lkdGgscS5jYW52YXMu
aGVpZ2h0KTs9CmguaXNIaWdobGlnaHRpbmc9M0R0cnVlO2guY3VycmVudE5laWdoYm9yPTNEcDtp
ZihoLnNob3dNYXJrZXIpe2EobCxwKX1pZihsLj0Kc2VyaWVzW3Auc2VyaWVzSW5kZXhdLnNob3cm
Jmguc2hvd1Rvb2x0aXAmJighbXx8IW0uX3pvb20uc3RhcnRlZCkpe2cobCxsLnNlPQpyaWVzW3Au
c2VyaWVzSW5kZXhdLHApfWlmKGguYnJpbmdTZXJpZXNUb0Zyb250KXtsLm1vdmVTZXJpZXNUb0Zy
b250KHAuc2VyaWU9CnNJbmRleCl9fX19fX19fSkoalF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5MDY3
NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy9zdGF0aWMvdmlld3MvdHlwZXMuanMKLS0tIGEv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3N0YXRpYy92aWV3cy90eXBlcy5q
cworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvc3RhdGljL3ZpZXdz
L3R5cGVzLmpzCkBAIC0yOSwxNCArMjksMjYgQEAKICAgICAgICAgLy8gY3JlYXRlIG5ldyBlbGVt
ZW50CiAgICAgICAgIHZhciAkZWwgPTNEICQoJzxkaXYgY2xhc3M9M0QiY2hhcnRzLWdyaWQiLz4n
KTsKICAgICAgICA9MjAKKyAgICAgICAgLy8gY29uc3RydWN0IGNoYXJ0IHR5cGUgc3Vic2V0IHNl
bGVjdGlvbiBidXR0b25zCisgICAgICAgIHRoaXMubGlicmFyeSA9M0QgbmV3IFVpLlJhZGlvQnV0
dG9uKHsKKyAgICAgICAgICAgIGRhdGEgICAgOiBbIHsgbGFiZWw6ICdEZWZhdWx0JywgdmFsdWU6
ICdkZWZhdWx0JyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ1NtYWxsICg8
MWsgbGluZXMpJywgdmFsdWU6ICdzbWFsbCcgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsg
bGFiZWw6ICdNZWRpdW0gKDwxMGsgbGluZXMpJywgdmFsdWU6ICdtZWRpdW0nIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTGFyZ2UgKD4xMGsgbGluZXMpJywgdmFsdWU6ICds
YXJnZScgfV0sCisgICAgICAgICAgICBvbmNoYW5nZTogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZmlsdGVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgICAgICRlbC5hcHBlbmQoVXRpbHMud3JhcCh0aGlzLmxpYnJhcnkuJGVsKSk7
CisgICAgICAgPTIwCiAgICAgICAgIC8vIHNldCBlbGVtZW50CiAgICAgICAgIHRoaXMuc2V0RWxl
bWVudCgkZWwpOwogICAgICAgID0yMAogICAgICAgICAvLyByZW5kZXIKICAgICAgICAgdGhpcy5f
cmVuZGVyKCk7CiAgICAgICAgPTIwCi0gICAgICAgIC8vIHNob3cgb25seSBkZWZhdWx0IGNoYXJ0
IHR5cGVzCi0gICAgICAgIHRoaXMuX2ZpbHRlcignZGVmYXVsdCcpOworICAgICAgICAvLyBzZXQK
KyAgICAgICAgdGhpcy5saWJyYXJ5LnZhbHVlKCdkZWZhdWx0Jyk7CiAgICAgfSwKICAgID0yMAog
ICAgIC8vIHZhbHVlCgpkaWZmIC1yIGRiOTJmNmUxOWIzODE4MDk3YmQzZDVhMTQ5YWNmODBjZWQ5
MDY3NWMgLXIgYTBkMWE5MWUwNWJlZTMyZGQ1ZjJmYWM9CjkzZDgwZmJlOTM1YmE4YzI4IGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2NoYXJ0cy90ZW1wbGF0ZXMvY2hhcnRzLm1ha28KLS0t
IGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvY2hhcnRzL3RlbXBsYXRlcy9jaGFydHMu
bWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9jaGFydHMvdGVtcGxhdGVz
L2NoYXJ0cy5tYWtvCkBAIC0yMSw5ICsyMSwxNCBAQAogICAgICAgICAjIyBzaGFyZWQgY3NzCiAg
ICAgICAgICR7aC5jc3MoICdiYXNlJyApfQo9MjAKLSAgICAgICAgIyMgY3NzCisgICAgICAgICMj
IG52ZDMKICAgICAgICAgJHtoLnN0eWxlc2hlZXRfbGluayggYXBwX3Jvb3QgKyAicGx1Z2lucy9u
dmQzL252LmQzLmNzcyIgKX0KPTIwCisgICAgICAgICMjIGpxcGxvdAorICAgICAgICAke2guc3R5
bGVzaGVldF9saW5rKCBhcHBfcm9vdCArICJwbHVnaW5zL2pxcGxvdC9qcXVlcnkuanFwbG90LmNz
cyI9CiApfQorICAgICAgICAke2guamF2YXNjcmlwdF9saW5rKCBhcHBfcm9vdCArICJwbHVnaW5z
L2pxcGxvdC9qcXVlcnkuanFwbG90LmpzIiA9Cil9CisgICAgICAgICR7aC5qYXZhc2NyaXB0X2xp
bmsoIGFwcF9yb290ICsgInBsdWdpbnMvanFwbG90L2pxdWVyeS5qcXBsb3QucGx1Zz0KaW5zLmpz
IiApfQorCiAgICAgICAgICMjIGxvYWQgbWVyZ2VkL21pbmlmaWVkIGNvZGUKICAgICAgICAgJHto
LmphdmFzY3JpcHRfbGluayggYXBwX3Jvb3QgKyAiYnVpbGQtYXBwLmpzIiApfQogICAgICAgID0y
MApAQCAtNTYsMTUgKzYxLDEzIEBACiAgICAgICAgICAgICByZXF1aXJlLmNvbmZpZyh7CiAgICAg
ICAgICAgICAgICAgYmFzZVVybDogY29uZmlnLnJvb3QgKyAic3RhdGljL3NjcmlwdHMvIiwKICAg
ICAgICAgICAgICAgICBwYXRoczogewotICAgICAgICAgICAgICAgICAgICAicGx1Z2luIiAgICAg
ICAgOiAiJHthcHBfcm9vdH0iLAotICAgICAgICAgICAgICAgICAgICAiYmVhbiIgICAgICAgICAg
OiAiJHthcHBfcm9vdH0vcGx1Z2lucy9mbG90cjIvYmVhbiIsCi0gICAgICAgICAgICAgICAgICAg
ICJmbG90cjIiICAgICAgICA6ICIke2FwcF9yb290fS9wbHVnaW5zL2Zsb3RyMi9mbG90cjItYT0K
bWQiLAotICAgICAgICAgICAgICAgICAgICAiZDMiICAgICAgICAgICAgOiAibGlicy9kMyIKKyAg
ICAgICAgICAgICAgICAgICAgInBsdWdpbiIgICAgICAgIDogIiR7YXBwX3Jvb3R9IgogICAgICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgc2hpbTogewogICAgICAgICAgICAgICAgICAg
ICAibGlicy91bmRlcnNjb3JlIjogeyBleHBvcnRzOiAiXyIgfSwKICAgICAgICAgICAgICAgICAg
ICAgImxpYnMvYmFja2JvbmUvYmFja2JvbmUiOiB7IGV4cG9ydHM6ICJCYWNrYm9uZSIgfSwKLSAg
ICAgICAgICAgICAgICAgICAgImQzIjogeyBleHBvcnRzOiAiZDMifQorICAgICAgICAgICAgICAg
ICAgICAiZDMiOiB7IGV4cG9ydHM6ICJkMyJ9LAorCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSk7CgpSZXBvc2l0b3J5IFVSTDogaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC8KCi0tCgpUaGlzIGlzIGEgY29tbWl0IG5vdGlmaWNhdGlvbiBmcm9tIGJp
dGJ1Y2tldC5vcmcuIFlvdSBhcmUgcmVjZWl2aW5nCnRoaXMgYmVjYXVzZSB5b3UgaGF2ZSB0aGUg
c2VydmljZSBlbmFibGVkLCBhZGRyZXNzaW5nIHRoZSByZWNpcGllbnQgb2YKdGhpcyBlbWFpbC4K
1
0
commit/galaxy-central: jmchilton: Merged in jmchilton/galaxy-central-fork-1 (pull request #407)
by commits-noreply@bitbucket.org 09 Jun '14
by commits-noreply@bitbucket.org 09 Jun '14
09 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/db92f6e19b38/
Changeset: db92f6e19b38
User: jmchilton
Date: 2014-06-10 03:15:37
Summary: Merged in jmchilton/galaxy-central-fork-1 (pull request #407)
Hide concept of job resources in workflows interface, scrub tool state when extracting workflows.
Affected #: 5 files
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -2589,10 +2589,13 @@
# No value, insert the default
if input.name not in values:
if isinstance( input, Conditional ):
- messages[ input.name ] = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ cond_messages = {}
+ if not input.is_job_resource_conditional:
+ cond_messages = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ messages[ input.name ] = cond_messages
test_value = input.test_param.get_initial_value( trans, context )
current_case = input.get_current_case( test_value, trans )
- self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, messages[ input.name ], context, prefix, allow_workflow_parameters=allow_workflow_parameters )
+ self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, allow_workflow_parameters=allow_workflow_parameters )
elif isinstance( input, Repeat ):
if input.min:
messages[ input.name ] = []
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/tools/parameters/grouping.py
--- a/lib/galaxy/tools/parameters/grouping.py
+++ b/lib/galaxy/tools/parameters/grouping.py
@@ -540,6 +540,10 @@
cond_dict[ "test_param" ] = nested_to_dict( self.test_param )
return cond_dict
+ @property
+ def is_job_resource_conditional(self):
+ return self.name == "__job_resource"
+
class ConditionalWhen( object, Dictifiable ):
dict_collection_visible_keys = ( 'value', )
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/workflow/extract.py
--- a/lib/galaxy/workflow/extract.py
+++ b/lib/galaxy/workflow/extract.py
@@ -317,6 +317,13 @@
rep_index = rep_values['__index__']
cleanup( "%s%s_%d|" % (prefix, key, rep_index ), input.inputs, group_values[i] )
elif isinstance( input, Conditional ):
+ # Scrub dynamic resource related parameters from workflows,
+ # they cause problems and the workflow probably should include
+ # their state in workflow encoding.
+ if input.is_job_resource_conditional:
+ if input.name in values:
+ del values[input.name]
+ return
group_values = values[input.name]
current_case = group_values['__current_case__']
cleanup( "%s%s|" % ( prefix, key ), input.cases[current_case].inputs, group_values )
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c templates/webapps/galaxy/workflow/editor_tool_form.mako
--- a/templates/webapps/galaxy/workflow/editor_tool_form.mako
+++ b/templates/webapps/galaxy/workflow/editor_tool_form.mako
@@ -28,6 +28,9 @@
<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% group_prefix = prefix + input.name + "|" %>
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c templates/webapps/galaxy/workflow/run.mako
--- a/templates/webapps/galaxy/workflow/run.mako
+++ b/templates/webapps/galaxy/workflow/run.mako
@@ -339,6 +339,9 @@
## <div class="form-row"><input type="submit" name="${step.id}|${prefix}${input.name}_add" value="Add new ${input.title}" /></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% new_prefix = prefix + input.name + "|" %>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/e7271620d7d7/
Changeset: e7271620d7d7
User: jmchilton
Date: 2014-06-09 20:36:17
Summary: Hide concept of job resources in workflows interface, scrupt tool state when extracting workflows.
Workflows describe abstract computational flow - not how to run the job - so I think it makes sense to not include the state of resource parameters in the workflow. Ideally, the option to override the defaults would always be available at runtime - this is not there currently but I think it is better to have a lower utility core functionality that is correct and can be supported than having something currently maximally functional but may be difficult/impossible to support in the future.
Also now auto-fill of job resource defaults produces no warnings (improves UX when rerunning job with previously didn't have resource parameters or if job resource types change over time).
Affected #: 5 files
diff -r 5884328e91724e9bdf4b43f012eb63fa0c803ef6 -r e7271620d7d7ee8b322d21d7eab9c85bff032133 lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -2589,10 +2589,13 @@
# No value, insert the default
if input.name not in values:
if isinstance( input, Conditional ):
- messages[ input.name ] = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ cond_messages = {}
+ if not input.is_job_resource_conditional:
+ cond_messages = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ messages[ input.name ] = cond_messages
test_value = input.test_param.get_initial_value( trans, context )
current_case = input.get_current_case( test_value, trans )
- self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, messages[ input.name ], context, prefix, allow_workflow_parameters=allow_workflow_parameters )
+ self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, allow_workflow_parameters=allow_workflow_parameters )
elif isinstance( input, Repeat ):
if input.min:
messages[ input.name ] = []
diff -r 5884328e91724e9bdf4b43f012eb63fa0c803ef6 -r e7271620d7d7ee8b322d21d7eab9c85bff032133 lib/galaxy/tools/parameters/grouping.py
--- a/lib/galaxy/tools/parameters/grouping.py
+++ b/lib/galaxy/tools/parameters/grouping.py
@@ -540,6 +540,10 @@
cond_dict[ "test_param" ] = nested_to_dict( self.test_param )
return cond_dict
+ @property
+ def is_job_resource_conditional(self):
+ return self.name == "__job_resource"
+
class ConditionalWhen( object, Dictifiable ):
dict_collection_visible_keys = ( 'value', )
diff -r 5884328e91724e9bdf4b43f012eb63fa0c803ef6 -r e7271620d7d7ee8b322d21d7eab9c85bff032133 lib/galaxy/workflow/extract.py
--- a/lib/galaxy/workflow/extract.py
+++ b/lib/galaxy/workflow/extract.py
@@ -317,6 +317,13 @@
rep_index = rep_values['__index__']
cleanup( "%s%s_%d|" % (prefix, key, rep_index ), input.inputs, group_values[i] )
elif isinstance( input, Conditional ):
+ # Scrub dynamic resource related parameters from workflows,
+ # they cause problems and the workflow probably should include
+ # their state in workflow encoding.
+ if input.is_job_resource_conditional:
+ if input.name in values:
+ del values[input.name]
+ return
group_values = values[input.name]
current_case = group_values['__current_case__']
cleanup( "%s%s|" % ( prefix, key ), input.cases[current_case].inputs, group_values )
diff -r 5884328e91724e9bdf4b43f012eb63fa0c803ef6 -r e7271620d7d7ee8b322d21d7eab9c85bff032133 templates/webapps/galaxy/workflow/editor_tool_form.mako
--- a/templates/webapps/galaxy/workflow/editor_tool_form.mako
+++ b/templates/webapps/galaxy/workflow/editor_tool_form.mako
@@ -28,6 +28,9 @@
<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% group_prefix = prefix + input.name + "|" %>
diff -r 5884328e91724e9bdf4b43f012eb63fa0c803ef6 -r e7271620d7d7ee8b322d21d7eab9c85bff032133 templates/webapps/galaxy/workflow/run.mako
--- a/templates/webapps/galaxy/workflow/run.mako
+++ b/templates/webapps/galaxy/workflow/run.mako
@@ -339,6 +339,9 @@
## <div class="form-row"><input type="submit" name="${step.id}|${prefix}${input.name}_add" value="Add new ${input.title}" /></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% new_prefix = prefix + input.name + "|" %>
https://bitbucket.org/galaxy/galaxy-central/commits/db92f6e19b38/
Changeset: db92f6e19b38
User: jmchilton
Date: 2014-06-10 03:15:37
Summary: Merged in jmchilton/galaxy-central-fork-1 (pull request #407)
Hide concept of job resources in workflows interface, scrub tool state when extracting workflows.
Affected #: 5 files
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -2589,10 +2589,13 @@
# No value, insert the default
if input.name not in values:
if isinstance( input, Conditional ):
- messages[ input.name ] = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ cond_messages = {}
+ if not input.is_job_resource_conditional:
+ cond_messages = { input.test_param.name: "No value found for '%s%s', used default" % ( prefix, input.label ) }
+ messages[ input.name ] = cond_messages
test_value = input.test_param.get_initial_value( trans, context )
current_case = input.get_current_case( test_value, trans )
- self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, messages[ input.name ], context, prefix, allow_workflow_parameters=allow_workflow_parameters )
+ self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, allow_workflow_parameters=allow_workflow_parameters )
elif isinstance( input, Repeat ):
if input.min:
messages[ input.name ] = []
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/tools/parameters/grouping.py
--- a/lib/galaxy/tools/parameters/grouping.py
+++ b/lib/galaxy/tools/parameters/grouping.py
@@ -540,6 +540,10 @@
cond_dict[ "test_param" ] = nested_to_dict( self.test_param )
return cond_dict
+ @property
+ def is_job_resource_conditional(self):
+ return self.name == "__job_resource"
+
class ConditionalWhen( object, Dictifiable ):
dict_collection_visible_keys = ( 'value', )
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c lib/galaxy/workflow/extract.py
--- a/lib/galaxy/workflow/extract.py
+++ b/lib/galaxy/workflow/extract.py
@@ -317,6 +317,13 @@
rep_index = rep_values['__index__']
cleanup( "%s%s_%d|" % (prefix, key, rep_index ), input.inputs, group_values[i] )
elif isinstance( input, Conditional ):
+ # Scrub dynamic resource related parameters from workflows,
+ # they cause problems and the workflow probably should include
+ # their state in workflow encoding.
+ if input.is_job_resource_conditional:
+ if input.name in values:
+ del values[input.name]
+ return
group_values = values[input.name]
current_case = group_values['__current_case__']
cleanup( "%s%s|" % ( prefix, key ), input.cases[current_case].inputs, group_values )
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c templates/webapps/galaxy/workflow/editor_tool_form.mako
--- a/templates/webapps/galaxy/workflow/editor_tool_form.mako
+++ b/templates/webapps/galaxy/workflow/editor_tool_form.mako
@@ -28,6 +28,9 @@
<div class="form-row"><input type="submit" name="${prefix}${input.name}_add" value="Add new ${input.title}"></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% group_prefix = prefix + input.name + "|" %>
diff -r 702004fc9ca216594ba7c88deb1153cafd37a573 -r db92f6e19b3818097bd3d5a149acf80ced90675c templates/webapps/galaxy/workflow/run.mako
--- a/templates/webapps/galaxy/workflow/run.mako
+++ b/templates/webapps/galaxy/workflow/run.mako
@@ -339,6 +339,9 @@
## <div class="form-row"><input type="submit" name="${step.id}|${prefix}${input.name}_add" value="Add new ${input.title}" /></div></div>
%elif input.type == "conditional":
+ %if input.is_job_resource_conditional:
+ <% continue %>
+ %endif
<% group_values = values[input.name] %><% current_case = group_values['__current_case__'] %><% new_prefix = prefix + input.name + "|" %>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: jmchilton: More verbose and defensive exception handling when responding to LWR job updates.
by commits-noreply@bitbucket.org 09 Jun '14
by commits-noreply@bitbucket.org 09 Jun '14
09 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/702004fc9ca2/
Changeset: 702004fc9ca2
User: jmchilton
Date: 2014-06-09 23:58:10
Summary: More verbose and defensive exception handling when responding to LWR job updates.
Handler becoming non-responsive in some cases - this may fix it or there may be a race condition somewhere when caching status messages.
Affected #: 2 files
diff -r 2006b8020cb2b3908dc186fc02bf0635a232bffb -r 702004fc9ca216594ba7c88deb1153cafd37a573 lib/galaxy/jobs/runners/lwr.py
--- a/lib/galaxy/jobs/runners/lwr.py
+++ b/lib/galaxy/jobs/runners/lwr.py
@@ -153,10 +153,16 @@
return job_state
def __async_update( self, full_status ):
- job_id = full_status[ "job_id" ]
- job, job_wrapper = self.app.job_manager.job_handler.job_queue.job_pair_for_id( job_id )
- job_state = self.__job_state( job, job_wrapper )
- self.__update_job_state_for_lwr_status(job_state, full_status["status"])
+ job_id = None
+ try:
+ job_id = full_status[ "job_id" ]
+ job, job_wrapper = self.app.job_manager.job_handler.job_queue.job_pair_for_id( job_id )
+ job_state = self.__job_state( job, job_wrapper )
+ self.__update_job_state_for_lwr_status(job_state, full_status["status"])
+ except Exception:
+ log.exception( "Failed to update LWR job status for job_id %s" % job_id )
+ raise
+ # Nothing else to do? - Attempt to fail the job?
def queue_job(self, job_wrapper):
job_destination = job_wrapper.job_destination
diff -r 2006b8020cb2b3908dc186fc02bf0635a232bffb -r 702004fc9ca216594ba7c88deb1153cafd37a573 lib/galaxy/jobs/runners/lwr_client/manager.py
--- a/lib/galaxy/jobs/runners/lwr_client/manager.py
+++ b/lib/galaxy/jobs/runners/lwr_client/manager.py
@@ -103,7 +103,10 @@
callback(body)
except Exception:
log.exception("Failure processing job status update message.")
- message.ack()
+ except BaseException as e:
+ log.exception("Failure processing job status update message - BaseException type %s" % type(e))
+ finally:
+ message.ack()
def run():
self.exchange.consume("status_update", callback_wrapper, check=self)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: dannon: Detail why the 307 redirect tracking attempt in tool_shed/scripts/api/common.py does not work.
by commits-noreply@bitbucket.org 09 Jun '14
by commits-noreply@bitbucket.org 09 Jun '14
09 Jun '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/2006b8020cb2/
Changeset: 2006b8020cb2
User: dannon
Date: 2014-06-09 23:02:27
Summary: Detail why the 307 redirect tracking attempt in tool_shed/scripts/api/common.py does not work.
Affected #: 1 file
diff -r 80968afd0cba850290103fb20edad4c6d3c02899 -r 2006b8020cb2b3908dc186fc02bf0635a232bffb lib/tool_shed/scripts/api/common.py
--- a/lib/tool_shed/scripts/api/common.py
+++ b/lib/tool_shed/scripts/api/common.py
@@ -179,7 +179,10 @@
url = make_url( url, api_key=api_key, args=None )
# Fix for handling 307 redirect not being handled nicely by urllib2.urlopen when the
# urllib2.Request has data provided.
- url = urllib2.urlopen( urllib2.Request( url ) ).geturl()
+ # NOTE: This approach does *not* work -- this makes an extra GET request to the
+ # base collection with the method as the ID. That will never decode
+ # correctly.
+ # url = urllib2.urlopen( urllib2.Request( url ) ).geturl()
req = urllib2.Request( url, headers = { 'Content-Type': 'application/json' }, data = json.dumps( data ) )
return json.loads( urllib2.urlopen( req ).read() )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0