6101406040523480156200001257600080fd5b5060405180604001604052806005815260200164072929c86960db1b81525080604051806040016040528060018152602001603160f81b81525060405180604001604052806005815260200164072929c86960db1b81525060405180604001604052806005815260200164072929c86960db1b815250816003908162000099919062000244565b506004620000a8828262000244565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c0948501909152815191909601209052929092526101205250620001479050336200014d565b62000310565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001ca57607f821691505b602082108103620001eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023f57600081815260208120601f850160051c810160208610156200021a5750805b601f850160051c820191505b818110156200023b5782815560010162000226565b5050505b505050565b81516001600160401b038111156200026057620002606200019f565b6200027881620002718454620001b5565b84620001f1565b602080601f831160018114620002b05760008415620002975750858301515b600019600386901b1c1916600185901b1785556200023b565b600085815260208120601f198616915b82811015620002e157888601518255948401946001909101908401620002c0565b5085821015620003005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161286a620003606000396000611625015260006116740152600061164f015260006115a8015260006115d2015260006115fc015261286a6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a9059cbb116100a2578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104bf578063f1127ed8146104e6578063f2fde38b1461053d57600080fd5b8063a9059cbb1461042d578063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b80638da5cb5b116100de5780638da5cb5b146103e157806395d89b41146103ff5780639dcebf9a14610407578063a457c2d71461041a57600080fd5b8063782d6fe1146103a857806379cc6790146103bb5780637ecebe00146103ce57600080fd5b8063395093511161017c5780635c19a95c1161014b5780635c19a95c1461031c5780636fcfff451461032f57806370a082311461036a578063715018a6146103a057600080fd5b8063395093511461028357806340c10f191461029657806342966c68146102ab578063587cde1e146102be57600080fd5b806320606b70116101b857806320606b701461023257806323b872dd14610259578063313ce5671461026c5780633644e5151461027b57600080fd5b806306fdde03146101df578063095ea7b3146101fd57806318160ddd14610220575b600080fd5b6101e7610550565b6040516101f4919061242e565b60405180910390f35b61021061020b3660046124c3565b6105e2565b60405190151581526020016101f4565b6002545b6040519081526020016101f4565b6102247f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6102106102673660046124ed565b6105fc565b604051601281526020016101f4565b61022461061f565b6102106102913660046124c3565b61062e565b6102a96102a43660046124c3565b61067a565b005b6102a96102b9366004612529565b61069c565b6102f76102cc366004612542565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600860205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b6102a961032a366004612542565b6106a9565b61035561033d366004612542565b600a6020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101f4565b610224610378366004612542565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102a96106b3565b6102246103b63660046124c3565b6106c7565b6102a96103c93660046124c3565b6109b2565b6102246103dc366004612542565b6109c7565b60075473ffffffffffffffffffffffffffffffffffffffff166102f7565b6101e76109f2565b6102a96104153660046124c3565b610a01565b6102106104283660046124c3565b610a52565b61021061043b3660046124c3565b610b2e565b61022461044e366004612542565b610b4f565b6102a961046136600461256e565b610bdd565b6102a96104743660046125c6565b610f94565b610224610487366004612630565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102247fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105216104f4366004612663565b60096020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016101f4565b6102a961054b366004612542565b611147565b60606003805461055f906126a3565b80601f016020809104026020016040519081016040528092919081815260200182805461058b906126a3565b80156105d85780601f106105ad576101008083540402835291602001916105d8565b820191906000526020600020905b8154815290600101906020018083116105bb57829003601f168201915b5050505050905090565b6000336105f08185856111fb565b60019150505b92915050565b60008061060a8585856113ae565b90506106178585856113c7565b949350505050565b600061062961158e565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105f0908290869061067590879061271f565b6111fb565b6106826116c2565b61068c8282611743565b610698600083836113c7565b5050565b6106a63382611836565b50565b6106a633826119fa565b6106bb6116c2565b6106c56000611a9e565b565b600043821061075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f39494e43483a3a6765745072696f72566f7465733a206e6f742079657420646560448201527f7465726d696e656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081205463ffffffff169081900361079b5760009150506105f6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260096020526040812084916107cd600185612732565b63ffffffff908116825260208201929092526040016000205416116108435773ffffffffffffffffffffffffffffffffffffffff841660009081526009602052604081209061081d600184612732565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506105f6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260096020908152604080832083805290915290205463ffffffff1683101561088b5760009150506105f6565b600080610899600184612732565b90505b8163ffffffff168163ffffffff16111561096e57600060026108be8484612732565b6108c89190612756565b6108d29083612732565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260096020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152919250879003610942576020015194506105f69350505050565b805163ffffffff1687111561095957819350610967565b610964600183612732565b92505b505061089c565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260096020908152604080832063ffffffff9094168352929052206001015491505092915050565b6109bd823383611b15565b6106988282611836565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120546105f6565b60606004805461055f906126a3565b610a096116c2565b3060009081526020819052604090205480821115610a3c57610a2c308483611be6565b610a373084836113c7565b505050565b610a47308484611be6565b610a373084846113c7565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610754565b610b2382868684036111fb565b506001949350505050565b600080610b3b8484611e55565b9050610b483385856113c7565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081205463ffffffff1680610b87576000610b48565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040812090610bb8600184612732565b63ffffffff1663ffffffff168152602001908152602001600020600101549392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610c08610550565b80519060200120610c164690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a9052825180850390910181526101408401909252815191909301207f1901000000000000000000000000000000000000000000000000000000000000610160830152610162820183905261018282018190529192506000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d88573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f39494e43483a3a64656c656761746542795369673a20696e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610754565b610e5f81611e63565b8914610eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f39494e43483a3a64656c656761746542795369673a20696e76616c6964206e6f60448201527f6e636500000000000000000000000000000000000000000000000000000000006064820152608401610754565b87421115610f7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f39494e43483a3a64656c656761746542795369673a207369676e61747572652060448201527f65787069726564000000000000000000000000000000000000000000000000006064820152608401610754565b610f87818b6119fa565b505050505b505050505050565b83421115610ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610754565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861102d8c611e63565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061109582611e98565b905060006110a582878787611f01565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610754565b610f878a8a8a6111fb565b61114f6116c2565b73ffffffffffffffffffffffffffffffffffffffff81166111f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610754565b6106a681611a9e565b73ffffffffffffffffffffffffffffffffffffffff831661129d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff8216611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000336113bc858285611b15565b610b23858585611be6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114035750600081115b15610a375773ffffffffffffffffffffffffffffffffffffffff8316156114cd5773ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081205463ffffffff16908161145d5760006114ad565b73ffffffffffffffffffffffffffffffffffffffff851660009081526009602052604081209061148e600185612732565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006114bb84836127a0565b90506114c986848484611f29565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610a375773ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205463ffffffff169081611522576000611572565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260096020526040812090611553600185612732565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611580848361271f565b9050610f8c85848484611f29565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156115f457507f000000000000000000000000000000000000000000000000000000000000000046145b1561161e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610754565b73ffffffffffffffffffffffffffffffffffffffff82166117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610754565b80600260008282546117d2919061271f565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166118d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600860208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611a988284836113c7565b50505050565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a985781811015611bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610754565b611a9884848484036111fb565b73ffffffffffffffffffffffffffffffffffffffff8316611c89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff8216611d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611de2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610754565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a98565b6000336105f0818585611be6565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b60006105f6611ea561158e565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f1287878787612142565b91509150611f1f81612231565b5095945050505050565b6000611f4d43604051806060016040528060358152602001612800603591396123e4565b905060008463ffffffff16118015611fb4575073ffffffffffffffffffffffffffffffffffffffff8516600090815260096020526040812063ffffffff831691611f98600188612732565b63ffffffff908116825260208201929092526040016000205416145b1561200a5773ffffffffffffffffffffffffffffffffffffffff851660009081526009602052604081208391611feb600188612732565b63ffffffff1681526020810191909152604001600020600101556120ea565b60408051808201825263ffffffff8381168252602080830186815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600983528581208a85168252909252939020915182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016911617815590516001918201556120919085906127b3565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156121795750600090506003612228565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156121cd573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661222157600060019250925050612228565b9150600090505b94509492505050565b6000816004811115612245576122456127d0565b0361224d5750565b6001816004811115612261576122616127d0565b036122c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610754565b60028160048111156122dc576122dc6127d0565b03612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610754565b6003816004811115612357576123576127d0565b036106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610754565b6000816401000000008410612426576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610754919061242e565b509192915050565b600060208083528351808285015260005b8181101561245b5785810183015185820160400152820161243f565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146124be57600080fd5b919050565b600080604083850312156124d657600080fd5b6124df8361249a565b946020939093013593505050565b60008060006060848603121561250257600080fd5b61250b8461249a565b92506125196020850161249a565b9150604084013590509250925092565b60006020828403121561253b57600080fd5b5035919050565b60006020828403121561255457600080fd5b610b488261249a565b803560ff811681146124be57600080fd5b60008060008060008060c0878903121561258757600080fd5b6125908761249a565b955060208701359450604087013593506125ac6060880161255d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a0312156125e157600080fd5b6125ea8861249a565b96506125f86020890161249a565b955060408801359450606088013593506126146080890161255d565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561264357600080fd5b61264c8361249a565b915061265a6020840161249a565b90509250929050565b6000806040838503121561267657600080fd5b61267f8361249a565b9150602083013563ffffffff8116811461269857600080fd5b809150509250929050565b600181811c908216806126b757607f821691505b602082108103611e92577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105f6576105f66126f0565b63ffffffff82811682821603908082111561274f5761274f6126f0565b5092915050565b600063ffffffff80841680612794577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b818103818111156105f6576105f66126f0565b63ffffffff81811683821601908082111561274f5761274f6126f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfe39494e43483a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220671a659ee119e83949610567132b37b6cc6c1179abdfe5ff02f8bd67492d9bf764736f6c63430008130033