0x60c06040523480156200001157600080fd5b50604051620024f1380380620024f1833981016040819052620000349162000080565b6001600160a01b0392831660805260a091909152600080546001600160a01b03191691909216179055620000c1565b80516001600160a01b03811681146200007b57600080fd5b919050565b6000806000606084860312156200009657600080fd5b620000a18462000063565b925060208401519150620000b86040850162000063565b90509250925092565b60805160a0516123af62000142600039600081816104d7015281816105ec01528181610c5001528181610d0b01528181610dd00152818161126901526114780152600081816101d0015281816104b6015281816105cb01528181610c2f01528181610cea01528181610daf01528181611248015261145701526123af6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806370b2474211610081578063c45a01551161005b578063c45a0155146101cb578063d06ca61f146101f2578063fee9574a1461020557600080fd5b806370b24742146101905780637fbb36e7146101a35780639d9f384d146101b857600080fd5b806329dbd944116100b257806329dbd944146101575780632aa4a9e51461016a5780634909c29a1461017d57600080fd5b806319145798146100d95780631f00ca74146101035780632954018c14610124575b600080fd5b6100ec6100e7366004611c6f565b610218565b6040516100fa929190611d0c565b60405180910390f35b610116610111366004611da9565b6104af565b6040519081526020016100fa565b61013f73fba0816a81bcabbf3829bed28618177a2bf0e82a81565b6040516001600160a01b0390911681526020016100fa565b60005461013f906001600160a01b031681565b610116610178366004611e54565b61051f565b61011661018b366004611f35565b610535565b6100ec61019e366004611c6f565b6107f7565b6101b66101b1366004611fa0565b610a61565b005b6101166101c6366004611fbd565b610bc7565b61013f7f000000000000000000000000000000000000000000000000000000000000000081565b610116610200366004611da9565b610da8565b610116610213366004611e54565b610e14565b6040805160028082526060828101909352600092918391816020016020820280368337019050509050858160008151811061025557610255612039565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061028957610289612039565b60200260200101906001600160a01b031690816001600160a01b03168152505060006102b58583610e23565b6000549091506001600160a01b03888116911614806102e157506000546001600160a01b038781169116145b15610350576000811161033b5760405162461bcd60e51b815260206004820152600d60248201527f6e6f2d706174682d666f756e640000000000000000000000000000000000000060448201526064015b60405180910390fd5b8061034583610ebe565b9350935050506104a7565b6040805160038082526080820190925260009160208201606080368337019050509050878160008151811061038757610387612039565b6001600160a01b0392831660209182029290920101526000548251911690829060019081106103b8576103b8612039565b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106103ec576103ec612039565b60200260200101906001600160a01b031690816001600160a01b03168152505060006104188783610e23565b905060008311806104295750600081115b6104755760405162461bcd60e51b815260206004820152600d60248201527f6e6f2d706174682d666f756e64000000000000000000000000000000000000006044820152606401610332565b80831115610494578261048785610ebe565b95509550505050506104a7565b8061049e83610ebe565b95509550505050505b935093915050565b60006104fd7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008585610ee7565b60008151811061050f5761050f612039565b6020026020010151905092915050565b600061052e836101118461103c565b9392505050565b60008061057787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061103c92505050565b905060008160008151811061058e5761058e612039565b60200260200101519050600082600184516105a99190612097565b815181106105b9576105b9612039565b602002602001015190506106576106467f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008660008151811061061e5761061e612039565b60200260200101518760018151811061063957610639612039565b6020026020010151611052565b6001600160a01b038416908961114e565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152600091908316906370a082319060240160206040518083038186803b1580156106b557600080fd5b505afa1580156106c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ed91906120ae565b90506106f984876111d3565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301528291908416906370a082319060240160206040518083038186803b15801561075657600080fd5b505afa15801561076a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078e91906120ae565b6107989190612097565b9450868510156107ea5760405162461bcd60e51b815260206004820152601360248201527f546f6f206c6974746c65207265636569766564000000000000000000000000006044820152606401610332565b5050505095945050505050565b6040805160028082526060828101909352600092918391816020016020820280368337019050509050858160008151811061083457610834612039565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061086857610868612039565b60200260200101906001600160a01b031690816001600160a01b0316815250506000610894858361155d565b6000549091506001600160a01b03888116911614806108c057506000546001600160a01b038781169116145b15610915576000811161033b5760405162461bcd60e51b815260206004820152600d60248201527f6e6f2d706174682d666f756e64000000000000000000000000000000000000006044820152606401610332565b6040805160038082526080820190925260009160208201606080368337019050509050878160008151811061094c5761094c612039565b6001600160a01b03928316602091820292909201015260005482519116908290600190811061097d5761097d612039565b60200260200101906001600160a01b031690816001600160a01b03168152505086816002815181106109b1576109b1612039565b60200260200101906001600160a01b031690816001600160a01b03168152505060006109dd878361155d565b905060008311806109ee5750600081115b610a3a5760405162461bcd60e51b815260206004820152600d60248201527f6e6f2d706174682d666f756e64000000000000000000000000000000000000006044820152606401610332565b600083118015610a4957508083105b80610a52575080155b15610494578261048785610ebe565b73fba0816a81bcabbf3829bed28618177a2bf0e82a6001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015610aae57600080fd5b505afa158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae691906120c7565b6001600160a01b0316336001600160a01b031614610b465760405162461bcd60e51b815260206004820152600c60248201527f6e6f742d676f7665726e6f7200000000000000000000000000000000000000006044820152606401610332565b600054604080516001600160a01b03928316815291831660208301527fa660aa88bd78e0552d7e2b6cb01df732642a0ff595c9c7b2ae67fb9e3db01f55910160405180910390a1600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600080610c0988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061103c92505050565b9050600081600081518110610c2057610c20612039565b60200260200101519050610c767f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008985610ee7565b600081518110610c8857610c88612039565b6020026020010151925085831115610ce25760405162461bcd60e51b815260206004820152601260248201527f546f6f206d7563682072657175657374656400000000000000000000000000006044820152606401610332565b610d69610d587f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085600081518110610d3d57610d3d612039565b60200260200101518660018151811061063957610639612039565b6001600160a01b038316908561114e565b610d7382856111d3565b6000610d7f8488612097565b90508015610d9b57610d9b6001600160a01b038316878361114e565b5050509695505050505050565b6000610df67f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000858561159e565b60018351610e049190612097565b8151811061050f5761050f612039565b600061052e836102008461103c565b6040517fd06ca61f000000000000000000000000000000000000000000000000000000008152600090309063d06ca61f90610e649086908690600401612128565b60206040518083038186803b158015610e7c57600080fd5b505afa925050508015610eac575060408051601f3d908101601f19168201909252610ea9918101906120ae565b60015b610eb557610eb8565b90505b92915050565b606081604051602001610ed19190612141565b6040516020818303038152906040529050919050565b6060600282511015610ef857600080fd5b815167ffffffffffffffff811115610f1257610f12611d25565b604051908082528060200260200182016040528015610f3b578160200160208202803683370190505b509050828160018351610f4e9190612097565b81518110610f5e57610f5e612039565b602002602001018181525050600060018351610f7a9190612097565b90505b801561103357600080610fce888887610f97600188612097565b81518110610fa757610fa7612039565b6020026020010151888781518110610fc157610fc1612039565b60200260200101516116d2565b91509150610ff6848481518110610fe757610fe7612039565b602002602001015183836117bb565b84611002600186612097565b8151811061101257611012612039565b6020026020010181815250505050808061102b90612154565b915050610f7d565b50949350505050565b606081806020019051810190610eb8919061216b565b60008060006110618585611872565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508790604801604051602081830303815290604052805190602001208760405160200161112b939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526111ce9084906118d6565b505050565b60005b600183516111e49190612097565b8110156111ce5760008084838151811061120057611200612039565b60200260200101518584600161121691906121fa565b8151811061122657611226612039565b602002602001015191509150600061123e8383611872565b509050600061128f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008686611052565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112d057600080fd5b505afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190612235565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080876001600160a01b03168a6001600160a01b031614611350578284611353565b83835b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b1580156113b557600080fd5b505afa1580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed91906120ae565b6113f79190612097565b95506114048683836119bb565b945050505050600080856001600160a01b0316886001600160a01b03161461142e57826000611432565b6000835b91509150600060028c516114469190612097565b8a10611452578a6114b4565b6114b47f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a8f6114a48f60026121fa565b8151811061063957610639612039565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091529091506001600160a01b0387169063022c0d9f9061150f9086908690869060248101612285565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b505050505050505050505050508080611555906122b3565b9150506111d6565b6040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000903090631f00ca7490610e649086908690600401612128565b60606002825110156115af57600080fd5b815167ffffffffffffffff8111156115c9576115c9611d25565b6040519080825280602002602001820160405280156115f2578160200160208202803683370190505b509050828160008151811061160957611609612039565b60200260200101818152505060005b600183516116269190612097565b8110156110335760008061166d888887868151811061164757611647612039565b60200260200101518887600161165d91906121fa565b81518110610fc157610fc1612039565b9150915061169584848151811061168657611686612039565b602002602001015183836119bb565b846116a18560016121fa565b815181106116b1576116b1612039565b602002602001018181525050505080806116ca906122b3565b915050611618565b60008060006116e18585611872565b5090506000806116f389898989611052565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117639190612235565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b0316146117a85780826117ab565b81815b909a909950975050505050505050565b600080841161180c5760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e540000000000006044820152606401610332565b60008311801561181c5750600082115b61182557600080fd5b600061183d6103e86118378688611a6c565b90611a6c565b905060006118516103e56118378689611a99565b9050611868600161186283856122ce565b90611ab4565b9695505050505050565b600080826001600160a01b0316846001600160a01b0316141561189457600080fd5b826001600160a01b0316846001600160a01b0316106118b45782846118b7565b83835b90925090506001600160a01b0382166118cf57600080fd5b9250929050565b600061192b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611acf9092919063ffffffff16565b8051909150156111ce57808060200190518101906119499190612309565b6111ce5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610332565b6000808411611a0c5760405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e54000000000000006044820152606401610332565b600083118015611a1c5750600082115b611a2557600080fd5b6000611a33856103e5611a6c565b90506000611a418285611a6c565b90506000611a5583611862886103e8611a6c565b9050611a6181836122ce565b979650505050505050565b6000821580611a9057508183611a82828261232b565b9250611a8e90836122ce565b145b610eb857600080fd5b600082611aa68382612097565b9150811115610eb857600080fd5b600082611ac183826121fa565b9150811015610eb857600080fd5b6060611ade8484600085611ae6565b949350505050565b606082471015611b5e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610332565b6001600160a01b0385163b611bb55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610332565b600080866001600160a01b03168587604051611bd1919061234a565b60006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5091509150611a6182828660608315611c2d57508161052e565b825115611c3d5782518084602001fd5b8160405162461bcd60e51b81526004016103329190612366565b6001600160a01b0381168114611c6c57600080fd5b50565b600080600060608486031215611c8457600080fd5b8335611c8f81611c57565b92506020840135611c9f81611c57565b929592945050506040919091013590565b60005b83811015611ccb578181015183820152602001611cb3565b83811115611cda576000848401525b50505050565b60008151808452611cf8816020860160208601611cb0565b601f01601f19169290920160200192915050565b828152604060208201526000611ade6040830184611ce0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d7d57611d7d611d25565b604052919050565b600067ffffffffffffffff821115611d9f57611d9f611d25565b5060051b60200190565b60008060408385031215611dbc57600080fd5b8235915060208084013567ffffffffffffffff811115611ddb57600080fd5b8401601f81018613611dec57600080fd5b8035611dff611dfa82611d85565b611d54565b81815260059190911b82018301908381019088831115611e1e57600080fd5b928401925b82841015611e45578335611e3681611c57565b82529284019290840190611e23565b80955050505050509250929050565b60008060408385031215611e6757600080fd5b8235915060208084013567ffffffffffffffff80821115611e8757600080fd5b818601915086601f830112611e9b57600080fd5b813581811115611ead57611ead611d25565b611ebf84601f19601f84011601611d54565b91508082528784828501011115611ed557600080fd5b80848401858401376000848284010152508093505050509250929050565b60008083601f840112611f0557600080fd5b50813567ffffffffffffffff811115611f1d57600080fd5b6020830191508360208285010111156118cf57600080fd5b600080600080600060808688031215611f4d57600080fd5b853567ffffffffffffffff811115611f6457600080fd5b611f7088828901611ef3565b90965094505060208601359250604086013591506060860135611f9281611c57565b809150509295509295909350565b600060208284031215611fb257600080fd5b8135610eb581611c57565b60008060008060008060a08789031215611fd657600080fd5b863567ffffffffffffffff811115611fed57600080fd5b611ff989828a01611ef3565b9097509550506020870135935060408701359250606087013561201b81611c57565b9150608087013561202b81611c57565b809150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156120a9576120a9612068565b500390565b6000602082840312156120c057600080fd5b5051919050565b6000602082840312156120d957600080fd5b8151610eb581611c57565b600081518084526020808501945080840160005b8381101561211d5781516001600160a01b0316875295820195908201906001016120f8565b509495945050505050565b828152604060208201526000611ade60408301846120e4565b60208152600061052e60208301846120e4565b60008161216357612163612068565b506000190190565b6000602080838503121561217e57600080fd5b825167ffffffffffffffff81111561219557600080fd5b8301601f810185136121a657600080fd5b80516121b4611dfa82611d85565b81815260059190911b820183019083810190878311156121d357600080fd5b928401925b82841015611a615783516121eb81611c57565b825292840192908401906121d8565b6000821982111561220d5761220d612068565b500190565b80516dffffffffffffffffffffffffffff8116811461223057600080fd5b919050565b60008060006060848603121561224a57600080fd5b61225384612212565b925061226160208501612212565b9150604084015163ffffffff8116811461227a57600080fd5b809150509250925092565b8481528360208201526001600160a01b03831660408201526080606082015260006118686080830184611ce0565b60006000198214156122c7576122c7612068565b5060010190565b600082612304577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561231b57600080fd5b81518015158114610eb557600080fd5b600081600019048311821515161561234557612345612068565b500290565b6000825161235c818460208701611cb0565b9190910192915050565b60208152600061052e6020830184611ce056fea2646970667358221220ecdd1ec604c25bd858fa3bdcccea0d585d3ced9c5fb8d187d04c986e9b8553b164736f6c634300080900330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2