608060405260016007553480156200001657600080fd5b5060405162002a6738038062002a6783398101604081905262000039916200019d565b8181600362000049838262000296565b50600462000058828262000296565b505050620000756200006f6200008260201b60201c565b62000086565b5050600160065562000362565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200010057600080fd5b81516001600160401b03808211156200011d576200011d620000d8565b604051601f8301601f19908116603f01168101908282118183101715620001485762000148620000d8565b816040528381526020925086838588010111156200016557600080fd5b600091505b838210156200018957858201830151818301840152908201906200016a565b600093810190920192909252949350505050565b60008060408385031215620001b157600080fd5b82516001600160401b0380821115620001c957600080fd5b620001d786838701620000ee565b93506020850151915080821115620001ee57600080fd5b50620001fd85828601620000ee565b9150509250929050565b600181811c908216806200021c57607f821691505b6020821081036200023d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029157600081815260208120601f850160051c810160208610156200026c5750805b601f850160051c820191505b818110156200028d5782815560010162000278565b5050505b505050565b81516001600160401b03811115620002b257620002b2620000d8565b620002ca81620002c3845462000207565b8462000243565b602080601f831160018114620003025760008415620002e95750858301515b600019600386901b1c1916600185901b1785556200028d565b600085815260208120601f198616915b82811015620003335788860151825594840194600190910190840162000312565b5085821015620003525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6126f580620003726000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a457c2d7116100a2578063dd62ed3e11610071578063dd62ed3e14610469578063e7a324dc146104af578063f1127ed8146104d6578063f2fde38b1461052d57600080fd5b8063a457c2d71461041d578063a9059cbb14610430578063b4b5ea5714610443578063c3cda5201461045657600080fd5b806379cc6790116100de57806379cc6790146103c45780637ecebe00146103d75780638da5cb5b146103f757806395d89b411461041557600080fd5b806370a0823114610373578063715018a6146103a9578063782d6fe1146103b157600080fd5b806340c10f1911610171578063587cde1e1161014b578063587cde1e146102b45780635c19a95c1461031257806362c06767146103255780636fcfff451461033857600080fd5b806340c10f191461028357806342966c681461029857806354fd4d50146102ab57600080fd5b806320606b70116101ad57806320606b701461022757806323b872dd1461024e578063313ce56714610261578063395093511461027057600080fd5b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610215575b600080fd5b6101dc610540565b6040516101e9919061232f565b60405180910390f35b6102056102003660046123a9565b6105d2565b60405190151581526020016101e9565b6002545b6040519081526020016101e9565b6102197f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61020561025c3660046123d3565b6105ec565b604051601281526020016101e9565b61020561027e3660046123a9565b610610565b6102966102913660046123a9565b61065c565b005b6102966102a636600461240f565b6106a4565b61021960075481565b6102ed6102c2366004612428565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600860205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b610296610320366004612428565b6106b1565b6102966103333660046123d3565b6106bb565b61035e610346366004612428565b600a6020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e9565b610219610381366004612428565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102966107b6565b6102196103bf3660046123a9565b6107ca565b6102966103d23660046123a9565b610ab5565b6102196103e5366004612428565b600b6020526000908152604090205481565b60055473ffffffffffffffffffffffffffffffffffffffff166102ed565b6101dc610b7b565b61020561042b3660046123a9565b610b8a565b61020561043e3660046123a9565b610c5b565b610219610451366004612428565b610caf565b610296610464366004612443565b610d3e565b6102196104773660046124a3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102197fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105116104e43660046124d6565b60096020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016101e9565b61029661053b366004612428565b6110af565b60606003805461054f90612516565b80601f016020809104026020016040519081016040528092919081815260200182805461057b90612516565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b6000336105e0818585611163565b60019150505b92915050565b6000336105fa858285611316565b6106058585856113ed565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906105e09082908690610657908790612598565b611163565b61066461165c565b61066e82826116dd565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600860205260408120546106a09216836117d0565b5050565b6106ae3382611997565b50565b6106ae3382611b5b565b6106c361165c565b6106cb611bf9565b73ffffffffffffffffffffffffffffffffffffffff83166107865760008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b5050905080610780576040517f9081276300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506107a7565b6107a773ffffffffffffffffffffffffffffffffffffffff84168383611c6c565b6107b16001600655565b505050565b6107be61165c565b6107c86000611cf9565b565b6000438210610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5468652073706563696669656420626c6f636b206973206e6f7420796574206660448201527f696e616c697a65642e000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081205463ffffffff169081900361089e5760009150506105e6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260096020526040812084916108d06001856125ab565b63ffffffff908116825260208201929092526040016000205416116109465773ffffffffffffffffffffffffffffffffffffffff84166000908152600960205260408120906109206001846125ab565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506105e6565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260096020908152604080832083805290915290205463ffffffff1683101561098e5760009150506105e6565b60008061099c6001846125ab565b90505b8163ffffffff168163ffffffff161115610a7157600060026109c184846125ab565b6109cb91906125cf565b6109d590836125ab565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260096020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152919250879003610a45576020015194506105e69350505050565b805163ffffffff16871115610a5c57819350610a6a565b610a676001836125ab565b92505b505061099f565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260096020908152604080832063ffffffff9094168352929052206001015491505092915050565b610abf8233610477565b811015610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610857565b600081610b5a8433610477565b610b649190612619565b9050610b71833383611163565b6107b18383611997565b60606004805461054f90612516565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610857565b6106058286868403611163565b6000610c683384846113ed565b336000908152600860205260408082205473ffffffffffffffffffffffffffffffffffffffff86811684529190922054610ca69282169116846117d0565b50600192915050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081205463ffffffff1680610ce7576000610d37565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260096020526040812090610d186001846125ab565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610d69610540565b80519060200120610d774690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a9052825180850390910181526101408401909252815191909301207f1901000000000000000000000000000000000000000000000000000000000000610160830152610162820183905261018282018190529192506000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610ee9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c6964207369676e61747572652e00000000000000000000000000006044820152606401610857565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260408120805491610fc28361262c565b91905055891461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c6964206e6f6e63652e0000000000000000000000000000000000006044820152606401610857565b87421115611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5369676e617475726520657870697265642e00000000000000000000000000006044820152606401610857565b6110a2818b611b5b565b505050505b505050505050565b6110b761165c565b73ffffffffffffffffffffffffffffffffffffffff811661115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610857565b6106ae81611cf9565b73ffffffffffffffffffffffffffffffffffffffff8316611205576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff82166112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113e757818110156113da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610857565b6113e78484848403611163565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff8216611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113e7565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610857565b73ffffffffffffffffffffffffffffffffffffffff821661175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610857565b806002600082825461176c9190612598565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561180c5750600081115b156107b15773ffffffffffffffffffffffffffffffffffffffff8316156118d65773ffffffffffffffffffffffffffffffffffffffff83166000908152600a602052604081205463ffffffff1690816118665760006118b6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600960205260408120906118976001856125ab565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006118c48483612619565b90506118d286848484611d70565b5050505b73ffffffffffffffffffffffffffffffffffffffff8216156107b15773ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205463ffffffff16908161192b57600061197b565b73ffffffffffffffffffffffffffffffffffffffff841660009081526009602052604081209061195c6001856125ab565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006119898483612598565b90506110a785848484611d70565b73ffffffffffffffffffffffffffffffffffffffff8216611a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610857565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600860208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46113e78284836117d0565b600260065403611c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610857565b6002600655565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107b1908490611fa6565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611db1436040518060400160405280601d81526020017f426c6f636b206e756d626572206578636565647320333220626974732e0000008152506120b2565b905060008463ffffffff16118015611e18575073ffffffffffffffffffffffffffffffffffffffff8516600090815260096020526040812063ffffffff831691611dfc6001886125ab565b63ffffffff908116825260208201929092526040016000205416145b15611e6e5773ffffffffffffffffffffffffffffffffffffffff851660009081526009602052604081208391611e4f6001886125ab565b63ffffffff168152602081019190915260400160002060010155611f4e565b60408051808201825263ffffffff8381168252602080830186815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600983528581208a85168252909252939020915182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001691161781559051600191820155611ef5908590612664565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000612008826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120fc9092919063ffffffff16565b8051909150156107b157808060200190518101906120269190612681565b6107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610857565b60008164010000000084106120f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610857919061232f565b509192915050565b606061210b8484600085612113565b949350505050565b6060824710156121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610857565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516121ce91906126a3565b60006040518083038185875af1925050503d806000811461220b576040519150601f19603f3d011682016040523d82523d6000602084013e612210565b606091505b50915091506122218783838761222c565b979650505050505050565b606083156122c25782516000036122bb5773ffffffffffffffffffffffffffffffffffffffff85163b6122bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610857565b508161210b565b61210b83838151156122d75781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610857919061232f565b60005b8381101561232657818101518382015260200161230e565b50506000910152565b602081526000825180602084015261234e81604085016020870161230b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146123a457600080fd5b919050565b600080604083850312156123bc57600080fd5b6123c583612380565b946020939093013593505050565b6000806000606084860312156123e857600080fd5b6123f184612380565b92506123ff60208501612380565b9150604084013590509250925092565b60006020828403121561242157600080fd5b5035919050565b60006020828403121561243a57600080fd5b610d3782612380565b60008060008060008060c0878903121561245c57600080fd5b61246587612380565b95506020870135945060408701359350606087013560ff8116811461248957600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156124b657600080fd5b6124bf83612380565b91506124cd60208401612380565b90509250929050565b600080604083850312156124e957600080fd5b6124f283612380565b9150602083013563ffffffff8116811461250b57600080fd5b809150509250929050565b600181811c9082168061252a57607f821691505b602082108103612563577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105e6576105e6612569565b63ffffffff8281168282160390808211156125c8576125c8612569565b5092915050565b600063ffffffff8084168061260d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b818103818111156105e6576105e6612569565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361265d5761265d612569565b5060010190565b63ffffffff8181168382160190808211156125c8576125c8612569565b60006020828403121561269357600080fd5b81518015158114610d3757600080fd5b600082516126b581846020870161230b565b919091019291505056fea264697066735822122078fa2b213b8f82a9c1ad306161895af1e17031437e32c76ff0012e71c88beb6e64736f6c63430008130033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005426c6f6f640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424c4f4f44000000000000000000000000000000000000000000000000000000