0x6080604052600436106102975760003560e01c8063754e5bea1161015a578063b545e2b3116100c1578063d4da69ac1161007a578063d4da69ac14610a79578063dc3c71cd14610aa6578063e30c397814610ac6578063e5a6b10f14610ae4578063e99e47f314610b18578063f2fde38b14610b38576102f6565b8063b545e2b3146109b0578063c2485ebd146109c3578063c45a0155146109f0578063c805dd0f14610a24578063c8f5cdd514610a39578063d2e8756114610a59576102f6565b80638da5cb5b116101135780638da5cb5b146108d057806399f65804146108e55780639d96fced14610912578063a9e954b914610932578063b20321b414610965578063b281a7bd1461099d576102f6565b8063754e5bea146107fa57806379ba5097146108275780637b1039991461083c5780637c1fbda3146108705780637d52e6501461089057806381a398b5146108b0576102f6565b80634c9f72e3116101fe5780636280bce8116101b75780636280bce81461075f57806366822a441461077f57806366bfdc75146107925780636b58960a146107a55780636f07abcc146107c5578063715018a6146107e5576102f6565b80634c9f72e31461065d5780635001f3b51461067d57806352d1902d146106c45780635479d940146106f857806354fd4d501461072b578063578d630514610740576102f6565b80632b68b9c6116102505780632b68b9c6146105805780633ae97295146105955780633b885f2a146105b55780633e1c2183146105e2578063439fab9114610610578063483377bf14610630576102f6565b806301ffc9a71461046a578063044ad7be1461049f5780631dd27daf146104e5578063200e83771461051357806320f9241e1461054057806328a78d9b14610560576102f6565b366102f65760405162461bcd60e51b81526020600482015260366024820152600080516020614b7b833981519152604482015275081b9bc81d1c985b9cd9995c9cc81858d8d95c1d195960521b60648201526084015b60405180910390fd5b34801561030257600080fd5b506001600160e01b031960003516635430260d60e11b81900361032d575063578d630560e01b6103a1565b6001600160e01b03196000351663cf62d11560e01b0361035557506307d52e6560e41b6103a1565b6001600160e01b03196000351663bc7e25ff60e01b0361037d5750632c80c86d60e21b6103a1565b6001600160e01b031960003516636ba401df60e11b036103a15750633e1c218360e01b5b6000356001600160e01b0319908116908216146103ee5760405130903660008237826001600160e01b038251161781526000803683855af43d806000843e8180156103ea578184f35b8184fd5b6103fc60003560f81c610b58565b61040d60ff60003560f01c16610b58565b61041e60ff60003560e81c16610b58565b61042f60ff60003560e01c16610b58565b604051602001610442949392919061390a565b60408051601f198184030181529082905262461bcd60e51b82526102ed916004016139ca565b005b34801561047657600080fd5b5061048a6104853660046139dd565b610c4a565b60405190151581526020015b60405180910390f35b3480156104ab57600080fd5b5061048a6104ba366004613a1c565b6001600160a01b03166000908152600080516020614b9b833981519152602052604090205460ff1690565b3480156104f157600080fd5b50610505610500366004613a39565b610c90565b604051908152602001610496565b34801561051f57600080fd5b5061053361052e366004613a39565b610d01565b6040516104969190613a78565b34801561054c57600080fd5b5061050561055b366004613a39565b610dd8565b34801561056c57600080fd5b5061046861057b366004613b53565b610e36565b34801561058c57600080fd5b50610468610ef7565b3480156105a157600080fd5b506105056105b0366004613a39565b610f02565b3480156105c157600080fd5b506105d56105d0366004613a39565b610f6f565b60405161049691906139ca565b3480156105ee57600080fd5b506106026105fd366004613cb2565b611129565b604051610496929190613e04565b34801561061c57600080fd5b5061046861062b366004613e24565b6111be565b34801561063c57600080fd5b5061065061064b366004613a39565b6113f2565b6040516104969190613e58565b34801561066957600080fd5b50610468610678366004613b53565b6115fd565b34801561068957600080fd5b507f00000000000000000000000088e7ab71cc18b9f6fb091fc53fe3be467808e0f65b6040516001600160a01b039091168152602001610496565b3480156106d057600080fd5b506105057f9969c6aff411c5e5f0807500693e8f819ce88529615cfa6cab569b24788a101881565b34801561070457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000161048a565b34801561073757600080fd5b506105d56116b3565b34801561074c57600080fd5b5061048a61075b366004613cb2565b5190565b34801561076b57600080fd5b5061046861077a366004613ecc565b6116e3565b61050561078d366004613f1e565b611832565b6104686107a0366004613a39565b611928565b3480156107b157600080fd5b5061048a6107c0366004613a1c565b6119e1565b3480156107d157600080fd5b506105336107e0366004613a39565b611a3f565b3480156107f157600080fd5b50610468611a4a565b34801561080657600080fd5b5061081a610815366004613a39565b611a5e565b6040516104969190613f7b565b34801561083357600080fd5b50610468611ba1565b34801561084857600080fd5b506106ac7f0000000000000000000000000000000e3a3d22d7510b36bdc88994dab11eadc881565b34801561087c57600080fd5b5061081a61088b366004613a39565b611c1b565b34801561089c57600080fd5b506105056108ab366004613cb2565b611e93565b3480156108bc57600080fd5b506104686108cb366004613f8e565b611e9e565b3480156108dc57600080fd5b506106ac612190565b3480156108f157600080fd5b50610905610900366004613a39565b6121ac565b60405161049691906140ac565b34801561091e57600080fd5b506106ac61092d366004613a39565b612271565b34801561093e57600080fd5b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470610505565b34801561097157600080fd5b50610985610980366004613cb2565b6122d5565b6040516001600160401b039091168152602001610496565b6105056109ab366004613a1c565b6122e0565b6105056109be3660046140ea565b6124a7565b3480156109cf57600080fd5b506109e36109de366004613a39565b612563565b6040516104969190614122565b3480156109fc57600080fd5b506106ac7f0000000000000000000000001111111fde7dc956e3d7922bc779d9e2349afb6381565b348015610a3057600080fd5b5061050561271b565b348015610a4557600080fd5b50610468610a543660046141a2565b612734565b348015610a6557600080fd5b50610505610a74366004613a39565b6128e9565b348015610a8557600080fd5b50610a99610a94366004613a39565b612915565b6040516104969190614202565b348015610ab257600080fd5b50610505610ac1366004613a39565b612a0f565b348015610ad257600080fd5b506001546001600160a01b03166106ac565b348015610af057600080fd5b506106ac7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2457600080fd5b50610a99610b33366004613e24565b612a6d565b348015610b4457600080fd5b50610468610b53366004613a1c565b612a7e565b604080516002808252818301909252606091600091906020820181803683370190505090506000610b8a6010856142cf565b610b959060306142f1565b90506000610ba460108661430a565b610baf9060306142f1565b905060398260ff161115610bcb57610bc86007836142f1565b91505b60398160ff161115610be557610be26007826142f1565b90505b8160f81b83600081518110610bfc57610bfc61432c565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610c2a57610c2a61432c565b60200101906001600160f81b031916908160001a90535091949350505050565b60006001600160e01b03198216632fd28e3360e21b1480610c7b57506001600160e01b03198216633039146360e11b145b80610c8a5750610c8a82612b53565b92915050565b600081600180610c9f83612ba3565b6003811115610cb057610cb0613a52565b14610cba82612c0e565b90610cd85760405162461bcd60e51b81526004016102ed91906139ca565b50610ce1612cf6565b6000858152600391909101602052604090206004015492505b5050919050565b600080610d0d83612ba3565b90506002816003811115610d2357610d23613a52565b03610da7576000610d3384612d1a565b6003018054909150601b60fb1b908290600090610d4f90614342565b8110610d5d57610d5d61432c565b815460011615610d7c5790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614610d9c576002610d9f565b60035b949350505050565b6001816003811115610dbb57610dbb613a52565b03610dc95750600192915050565b50600092915050565b50919050565b600081600280610de783612ba3565b6003811115610df857610df8613a52565b14610e0282612c0e565b90610e205760405162461bcd60e51b81526004016102ed91906139ca565b50610e2a84612d1a565b60010154949350505050565b610e3e612d3a565b60005b8151811015610ebc576000828281518110610e5e57610e5e61432c565b602002602001015190506000610e7f600080516020614b9b83398151915290565b6001600160a01b039290921660009081526020929092526040909120805460ff191691151591909117905580610eb481614376565b915050610e41565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f181604051610eec919061438f565b60405180910390a150565b610eff612d3a565b33ff5b600081600180610f1183612ba3565b6003811115610f2257610f22613a52565b14610f2c82612c0e565b90610f4a5760405162461bcd60e51b81526004016102ed91906139ca565b50610f53612cf6565b6000858152600391820160205260409020015492505050919050565b60606000610f7c83612ba3565b6003811115610f8d57610f8d613a52565b03610fe05760405162461bcd60e51b815260206004820152602f6024820152600080516020614b7b83398151915260448201526e081b9bdd081e595d081c1bdcdd1959608a1b60648201526084016102ed565b6000610feb83612d99565b80549091506001600160a01b0316156110765780546040805163784a000160e11b815290516001600160a01b039092169163f0940002916004808201926000929091908290030181865afa158015611047573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106f9190810190614417565b9150610dd2565b600281015415610dd25760028101546001820154604051630565c45f60e31b81526001600160a01b037f0000000000000000000000000000000e3a3d22d7510b36bdc88994dab11eadc81692632b2e22f8926110dd92600401918252602082015260400190565b600060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111229190810190614417565b9392505050565b60006060600073eb9293996da011d95720fc791c57ce1647065b4463059c737f856040518263ffffffff1660e01b81526004016111669190614202565b600060405180830381865af4158015611183573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111ab919081019061445f565b8051602090910151909590945092505050565b60006111c8612cf6565b600101546001600160a01b031690508061120d575033806111e7612cf6565b60010180546001600160a01b0319166001600160a01b0392909216919091179055611267565b336001600160a01b038216146112675760405162461bcd60e51b815260206004820152602b6024820152600080516020614b7b83398151915260448201526a1037b7363c9037bbb732b960a91b60648201526084016102ed565b6000611271612cf6565b546001600160a01b031614611311577f00000000000000000000000088e7ab71cc18b9f6fb091fc53fe3be467808e0f66001600160a01b03166112b2612cf6565b546001600160a01b0316036113115760405162461bcd60e51b81526020600482015260316024820152600080516020614b7b83398151915260448201527008185b1c9958591e481d5c19dc98591959607a1b60648201526084016102ed565b7f00000000000000000000000088e7ab71cc18b9f6fb091fc53fe3be467808e0f661133a612cf6565b80546001600160a01b0319166001600160a01b039283161790557fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470907f00000000000000000000000088e7ab71cc18b9f6fb091fc53fe3be467808e0f616337fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66113c26116b3565b6040516113cf91906139ca565b60405180910390a46113ee8280602001905181019061067891906144fe565b5050565b604080518082019091526000815260606020820152600061141283610d01565b9050600181600381111561142857611428613a52565b03611461576040805180820190915280600081526020016040518060600160405280602f8152602001614af4602f913990529392505050565b600081600381111561147557611475613a52565b036114ae576040805180820190915280600081526020016040518060600160405280602e8152602001614b23602e913990529392505050565b73eb9293996da011d95720fc791c57ce1647065b44637e1a92b76114d185612d1a565b6003016040518263ffffffff1660e01b81526004016114f09190614597565b600060405180830381865af492505050801561152e57506040513d6000823e601f3d908101601f1916820160405261152b919081019061445f565b60015b6111225761153a614622565b806308c379a003611596575061154e61463e565b806115595750611598565b6040805180820190915280600081526020018260405160200161157c91906146c7565b60408051601f198184030181529190529052949350505050565b505b3d8080156115c2576040519150601f19603f3d011682016040523d82523d6000602084013e6115c7565b606091505b50604080518082019091528060008152602001604051806060016040528060218152602001614a8b602191399052949350505050565b611605612d3a565b60005b81518110156116835760008282815181106116255761162561432c565b602002602001015190506001611646600080516020614b9b83398151915290565b6001600160a01b039290921660009081526020929092526040909120805460ff19169115159190911790558061167b81614376565b915050611608565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca0181604051610eec919061438f565b60606116de7f302e372e31362d61323330613738000000000000000000000000000000000000612db6565b905090565b336000908152600080516020614b9b833981519152602052604090205460ff1661171f5760405162461bcd60e51b81526004016102ed90614700565b8360018061172c83612ba3565b600381111561173d5761173d613a52565b1461174782612c0e565b906117655760405162461bcd60e51b81526004016102ed91906139ca565b5060008590036117875760405162461bcd60e51b81526004016102ed90614749565b60008390036117a85760405162461bcd60e51b81526004016102ed906147b1565b6117f3336117ee88428989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e6192505050565b612ee0565b604080518781523360208201527ee9413c6321ec446a267b7ebf5bb108663f2ef58b35c4f6e18905ac8f205cb2910160405180910390a1505050505050565b6000343a82611840826128e9565b9050808310156118625760405162461bcd60e51b81526004016102ed9061480e565b61186a612cf6565b6002016000815461187a90614376565b918290555093503361188a612cf6565b60008681526003919091016020526040812060090180546001600160a01b0319166001600160a01b0393909316929092179091556118c785612d99565b60028101889055600181018790556003810184905560048101859055604080518781523360208201529192507fcabaf9c102f83746b27ae932f638eebfaf5ea7d014edd20ab14dec3768a8f55c910160405180910390a15050505092915050565b8060018061193583612ba3565b600381111561194657611946613a52565b1461195082612c0e565b9061196e5760405162461bcd60e51b81526004016102ed91906139ca565b50600061197a84612d99565b9050600034826004015461198e919061484b565b60038301549091503a908111156119d55760006119aa826128e9565b9050808310156119cc5760405162461bcd60e51b81526004016102ed9061480e565b50600383018190555b50600490910155505050565b6000806119ec612cf6565b600101546001600160a01b031690507f000000000000000000000000000000000000000000000000000000000000000180156111225750826001600160a01b0316816001600160a01b0316149392505050565b6000610c8a82612ba3565b611a52612d3a565b611a5c6000612f1b565b565b604080516080810182526000808252602082018190529181019190915260608082015281600280611a8e83612ba3565b6003811115611a9f57611a9f613a52565b14611aa982612c0e565b90611ac75760405162461bcd60e51b81526004016102ed91906139ca565b50611ad184612d1a565b6040805160808101825282546001600160a01b0316815260018301546020820152600283015491810191909152600382018054919291606084019190611b1690614342565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4290614342565b8015611b8f5780601f10611b6457610100808354040283529160200191611b8f565b820191906000526020600020905b815481529060010190602001808311611b7257829003601f168201915b50505050508152505092505050919050565b60015433906001600160a01b03168114611c0f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016102ed565b611c1881612f1b565b50565b604080516080810182526000808252602082018190529181019190915260608082015281600280611c4b83612ba3565b6003811115611c5c57611c5c613a52565b14611c6682612c0e565b90611c845760405162461bcd60e51b81526004016102ed91906139ca565b506000611c8f612cf6565b60008681526003919091016020526040902060098101549091506001600160a01b03163314611d065760405162461bcd60e51b815260206004820152602f6024820152600080516020614b7b83398151915260448201526e1037b7363c903932b8bab2b9ba32b960891b60648201526084016102ed565b604080516080810182526005830180546001600160a01b0316825260068401546020830152600784015492820192909252600883018054919291606084019190611d4f90614342565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7b90614342565b8015611dc85780601f10611d9d57610100808354040283529160200191611dc8565b820191906000526020600020905b815481529060010190602001808311611dab57829003601f168201915b5050505050815250509350611ddb612cf6565b600086815260039182016020526040812080546001600160a01b03199081168255600182018390556002820183905592810182905560048101829055600581018054909316835560068101829055600781018290559181611e3f600885018261382b565b50505060090180546001600160a01b0319169055604080518681523360208201527fdec847db058c9c012e0f3dbe2b99e05cfa4c693f61a7d8bc64652a68913cbfff910160405180910390a1505050919050565b6000610c8a82612f34565b336000908152600080516020614b9b833981519152602052604090205460ff16611eda5760405162461bcd60e51b81526004016102ed90614700565b8151600090815b81811015612179576000858281518110611efd57611efd61432c565b6020026020010151905060016003811115611f1a57611f1a613a52565b8151611f2590612ba3565b6003811115611f3657611f36613a52565b14611fa2578415611f9d5780516040805191825260208201819052602c90820152600080516020614b7b83398151915260608201526b08189859081c5d595c9e525960a21b6080820152600080516020614ad48339815191529060a0015b60405180910390a15b612166565b604081015160000361200c578415611f9d5780516040805191825260208201819052602d90820152600080516020614b7b83398151915260608201526c040c4c2c840c8e4a8f090c2e6d609b1b6080820152600080516020614ad48339815191529060a001611f94565b806060015151600003612078578415611f9d5780516040805191825260208201819052602e90820152600080516020614b7b83398151915260608201526d206261642063626f72427974657360901b6080820152600080516020614ad48339815191529060a001611f94565b6000816020015111801561208f5750428160200151115b156120f3578415611f9d5780516040805191825260208201819052602e90820152600080516020614b7b83398151915260608201526d0206261642074696d657374616d760941b6080820152600080516020614ad48339815191529060a001611f94565b8051602082015161211f91901561210e578260200151612110565b425b83604001518460600151612e61565b612129908561484b565b8151604080519182523360208301529195507ee9413c6321ec446a267b7ebf5bb108663f2ef58b35c4f6e18905ac8f205cb2910160405180910390a15b508061217181614376565b915050611ee1565b50811561218a5761218a3383612ee0565b50505050565b600061219a612cf6565b600101546001600160a01b0316919050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152816001806121e483612ba3565b60038111156121f5576121f5613a52565b146121ff82612c0e565b9061221d5760405162461bcd60e51b81526004016102ed91906139ca565b5061222784612d99565b6040805160a08101825282546001600160a01b0316815260018301546020820152600283015491810191909152600382015460608201526004909101546080820152949350505050565b60008160028061228083612ba3565b600381111561229157612291613a52565b1461229b82612c0e565b906122b95760405162461bcd60e51b81526004016102ed91906139ca565b506122c384612d1a565b546001600160a01b0316949350505050565b6000610c8a82612f69565b6000343a826122ee826128e9565b9050808310156123105760405162461bcd60e51b81526004016102ed9061480e565b6000801b856001600160a01b03166309bd5a606040518163ffffffff1660e01b8152600401602060405180830381865afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612376919061485e565b036123d75760405162461bcd60e51b81526020600482015260376024820152600080516020614b7b83398151915260448201527f206e6f20707265636f6d70696c6564207265717565737400000000000000000060648201526084016102ed565b6123df612cf6565b600201600081546123ef90614376565b91829055509350336123ff612cf6565b60008681526003919091016020526040812060090180546001600160a01b0319166001600160a01b03939093169290921790915561243c85612d99565b80546001600160a01b0319166001600160a01b0388161781556003810184905560048101859055604080518781523360208201529192507fcabaf9c102f83746b27ae932f638eebfaf5ea7d014edd20ab14dec3768a8f55c910160405180910390a150505050919050565b60408051638fadabeb60e01b8152823560048201526020830135602482015290820135604482015260608201356064820152608082013560848201526000906111229084906001600160a01b037f0000000000000000000000000000000e3a3d22d7510b36bdc88994dab11eadc81690638fadabeb9060a4016020604051808303816000875af115801561253f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d919061485e565b6125cd6040805161010081019091526000606082018181526080830182905260a0830182905260c0830182905260e0830191909152819081526040805160808101825260008082526020828101829052928201526060808201529101908152600060209091015290565b6125d5612cf6565b60008381526003918201602090815260409182902082516101008101845281546001600160a01b0390811660608084019182526001850154608080860191909152600286015460a08601529785015460c0850152600485015460e0850152908352855196870186526005840180549092168752600684015487860152600784015495870195909552600883018054929693959487019491929184019161267a90614342565b80601f01602080910402602001604051908101604052809291908181526020018280546126a690614342565b80156126f35780601f106126c8576101008083540402835291602001916126f3565b820191906000526020600020905b8154815290600101906020018083116126d657829003601f168201915b505050919092525050508152600991909101546001600160a01b031660209091015292915050565b6000612725612cf6565b600201546116de90600161484b565b336000908152600080516020614b9b833981519152602052604090205460ff166127705760405162461bcd60e51b81526004016102ed90614700565b8460018061277d83612ba3565b600381111561278e5761278e613a52565b1461279882612c0e565b906127b65760405162461bcd60e51b81526004016102ed91906139ca565b50428611156128215760405162461bcd60e51b815260206004820152603160248201527f5769746e657452657175657374426f617264547275737461626c65446566617560448201527006c743a206261642074696d657374616d7607c1b60648201526084016102ed565b60008590036128425760405162461bcd60e51b81526004016102ed90614749565b60008390036128635760405162461bcd60e51b81526004016102ed906147b1565b6128a9336117ee89898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e6192505050565b604080518881523360208201527ee9413c6321ec446a267b7ebf5bb108663f2ef58b35c4f6e18905ac8f205cb2910160405180910390a150505050505050565b6000610c8a7f000000000000000000000000000000000000000000000000000000000002078883614877565b61291d613865565b8160028061292a83612ba3565b600381111561293b5761293b613a52565b1461294582612c0e565b906129635760405162461bcd60e51b81526004016102ed91906139ca565b50600061296f85612d1a565b9050612a0681600301805461298390614342565b80601f01602080910402602001604051908101604052809291908181526020018280546129af90614342565b80156129fc5780601f106129d1576101008083540402835291602001916129fc565b820191906000526020600020905b8154815290600101906020018083116129df57829003601f168201915b5050505050612f9a565b95945050505050565b600081600280612a1e83612ba3565b6003811115612a2f57612a2f613a52565b14612a3982612c0e565b90612a575760405162461bcd60e51b81526004016102ed91906139ca565b50612a6184612d1a565b60020154949350505050565b612a75613865565b610c8a82612f9a565b612a86612d3a565b6000612a90612cf6565b600101546001600160a01b039081169150821681146113ee5781612ab2612cf6565b60010180546001600160a01b0319166001600160a01b03928316179055604051838216918316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160e01b03198216631a12e29960e21b1480612b8457506001600160e01b0319821663d1ab0e8760e01b145b80610c8a57506301ffc9a760e01b6001600160e01b0319831614610c8a565b600080612bae612cf6565b600084815260039190910160205260409020600781015490915015612bd65750600292915050565b60098101546001600160a01b031615612bf25750600192915050565b612bfa612cf6565b60020154831115610dc95750600392915050565b60606001826003811115612c2457612c24613a52565b03612c4857604051806060016040528060288152602001614aac6028913992915050565b6002826003811115612c5c57612c5c613a52565b03612c80576040518060600160405280602a8152602001614b51602a913992915050565b6003826003811115612c9457612c94613a52565b03612cb857604051806060016040528060298152602001614a626029913992915050565b505060408051808201909152601c81527f5769746e657452657175657374426f6172643a20626164206d6f6f6400000000602082015290565b919050565b7ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e18390565b6000612d24612cf6565b6000928352600301602052506040902060050190565b33612d43612190565b6001600160a01b031614611a5c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ed565b6000612da3612cf6565b6000928352600301602052506040902090565b60606000612dc383612fb8565b6001600160401b03811115612dda57612dda613a8b565b6040519080825280601f01601f191660200182016040528015612e04576020820181803683370190505b50905060005b8151811015612e5a57838160208110612e2557612e2561432c565b1a60f81b828281518110612e3b57612e3b61432c565b60200101906001600160f81b031916908160001a905350600101612e0a565b5092915050565b600080612e6d86612d99565b60068101869055600781018590556005810180546001600160a01b03191633178155909150819060088201612ea286826148dc565b505060049081015482546001600160a01b03191683556000600184018190556002840181905560038401819055929091019190915595945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612f16573d6000803e3d6000fd5b505050565b600180546001600160a01b0319169055611c1881612b03565b6000818060000151612f585760405162461bcd60e51b81526004016102ed9061499b565b611122612f6484612ff1565b613022565b6000818060000151612f8d5760405162461bcd60e51b81526004016102ed9061499b565b611122836020015161302f565b612fa2613865565b6000612fad83613092565b9050611122816130b7565b60005b6020811015612cf157818160208110612fd657612fd661432c565b1a60f81b6001600160f81b03191615612cf157600101612fbb565b60608180600001516130155760405162461bcd60e51b81526004016102ed9061499b565b61112283602001516130eb565b6000610c8a826020613235565b60008160008060ff16826040015160ff161461306f57604080830151905161800560e51b815260ff918216600482015290821660248201526044016102ed565b613081846000015185606001516132ad565b6001600160401b0316949350505050565b61309a613886565b604080518082019091528281526000602082015261112281613375565b6130bf613865565b5060a0810151604080518082019091526001600160401b03909116602714158152602081019190915290565b60608160028060ff16826040015160ff161461312b57604080830151905161800560e51b815260ff918216600482015290821660248201526044016102ed565b61313d846000015185606001516132ad565b6001600160401b03166080850181905263fffffffe190161321457600061316c85600001518660400151613495565b905063ffffffff808216101561320e5784516131919063ffffffff8084169061353b16565b6040516020016131a191906149ed565b60405160208183030381529060405293506131c485600001518660400151613495565b905063ffffffff808216101561320e57845184906131eb9063ffffffff8085169061353b16565b6040516020016131fc929190614a09565b60405160208183030381529060405293505b50610cfa565b6080840151845161322e9163ffffffff9081169061353b16565b9250610cfa565b600060208260ff16111561324b5761324b614a38565b60008260ff1684511161325f578351613264565b8260ff165b905060005b818110156132a557806008028582815181106132875761328761432c565b01602001516001600160f81b031916901c9290921791600101613269565b505092915050565b600060188260ff1610156132c5575060ff8116610c8a565b8160ff166018036132e3576132d9836135fb565b60ff169050610c8a565b8160ff16601903613302576132f78361365d565b61ffff169050610c8a565b8160ff16601a0361332357613316836136c9565b63ffffffff169050610c8a565b8160ff16601b0361333e5761333783613728565b9050610c8a565b8160ff16601f0361335757506001600160401b03610c8a565b604051636d785b1360e01b815260ff831660048201526024016102ed565b61337d613886565b81515182906000036133a2576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613425576133c2896135fb565b9550816133ce81614376565b6007600589901c169650601f88169550925050600519850161341d5760208901516133f98a866132ad565b9350808a6020015161340b9190614a4e565b613415908461484b565b9250506133b3565b5060006133b3565b600760ff8616111561344f5760405163bd2ac87960e01b815260ff861660048201526024016102ed565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b6000806134a1846135fb565b90508060ff1660ff036134be576001600160401b03915050610c8a565b6134cb8482601f166132ad565b91506001600160401b038083161061350157604051636d785b1360e01b81526001600160401b03831660048201526024016102ed565b60ff83166007600583901c1614612e5a5760405161800560e51b81526007600583901c16600482015260ff841660248201526044016102ed565b606081836020015161354d919061484b565b8351518082111561357b576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b836001600160401b0381111561359357613593613a8b565b6040519080825280601f01601f1916602001820160405280156135bd576020820181803683370190505b50925083156132a55784516020808701519081830181019086016135e281838a613787565b6135ee898960016137cb565b5050505050505092915050565b6000816020015182600001515180821115613633576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b835160208501805180830160010151955090819061365082614376565b8152505050505050919050565b600081602001516002613670919061484b565b8251518082111561369e576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b83516020850180516002818401810151965090916136bc828461484b565b9052509395945050505050565b6000816020015160046136dc919061484b565b8251518082111561370a576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b83516020850180516004818401810151965090916136bc828461484b565b60008160200151600861373b919061484b565b82515180821115613769576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b83516020850180516008818401810151965090916136bc828461484b565b5b602081106137a7578151835260209283019290910190601f1901613788565b8015612f1657905182516020929092036101000a6000190180199091169116179052565b600082846000015151808211156137ff576040516363a056dd60e01b815260048101839052602481018290526044016102ed565b8315613817576020860151613814908661484b565b94505b602086018590528492505b50509392505050565b50805461383790614342565b6000825580601f10613847575050565b601f016020900490600052602060002090810190611c1891906138cd565b6040518060400160405280600015158152602001613881613886565b905290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b808211156138e257600081556001016138ce565b5090565b60005b838110156139015781810151838201526020016138e9565b50506000910152565b600080516020614b7b833981519152815273040dcdee840d2dae0d8cadacadce8cac8744060f60631b60208201526000855161394d816034850160208a016138e6565b855190830190613964816034840160208a016138e6565b855191019061397a8160348401602089016138e6565b84519101906139908160348401602088016138e6565b016034019695505050505050565b600081518084526139b68160208601602086016138e6565b601f01601f19169290920160200192915050565b602081526000611122602083018461399e565b6000602082840312156139ef57600080fd5b81356001600160e01b03198116811461112257600080fd5b6001600160a01b0381168114611c1857600080fd5b600060208284031215613a2e57600080fd5b813561112281613a07565b600060208284031215613a4b57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110611c1857611c18613a52565b60208101613a8583613a68565b91905290565b634e487b7160e01b600052604160045260246000fd5b604081018181106001600160401b0382111715613ac057613ac0613a8b565b60405250565b60c081018181106001600160401b0382111715613ac057613ac0613a8b565b608081018181106001600160401b0382111715613ac057613ac0613a8b565b601f8201601f191681016001600160401b0381118282101715613b2957613b29613a8b565b6040525050565b60006001600160401b03821115613b4957613b49613a8b565b5060051b60200190565b60006020808385031215613b6657600080fd5b82356001600160401b03811115613b7c57600080fd5b8301601f81018513613b8d57600080fd5b8035613b9881613b30565b604051613ba58282613b04565b82815260059290921b8301840191848101915087831115613bc557600080fd5b928401925b82841015613bec578335613bdd81613a07565b82529284019290840190613bca565b979650505050505050565b80358015158114612cf157600080fd5b60006001600160401b03821115613c2057613c20613a8b565b50601f01601f191660200190565b600082601f830112613c3f57600080fd5b8135613c4a81613c07565b604051613c578282613b04565b828152856020848701011115613c6c57600080fd5b82602086016020830137600092810160200192909252509392505050565b803560ff81168114612cf157600080fd5b80356001600160401b0381168114612cf157600080fd5b60006020808385031215613cc557600080fd5b82356001600160401b0380821115613cdc57600080fd5b81850191506040808388031215613cf257600080fd5b8051613cfd81613aa1565b613d0684613bf7565b81528484013583811115613d1957600080fd5b939093019260c08489031215613d2e57600080fd5b8151613d3981613ac6565b843584811115613d4857600080fd5b8501808a03841315613d5957600080fd5b8351613d6481613aa1565b813586811115613d7357600080fd5b613d7f8c828501613c2e565b82525090870135878201528152613d97858701613c8a565b86820152613da6838601613c8a565b83820152613db660608601613c8a565b6060820152613dc760808601613c9b565b6080820152613dd860a08601613c9b565b60a082015294810194909452509195945050505050565b6101008110613e0057613e00613a52565b9052565b613e0e8184613def565b604060208201526000610d9f604083018461399e565b600060208284031215613e3657600080fd5b81356001600160401b03811115613e4c57600080fd5b610d9f84828501613c2e565b60208152613e6a602082018351613def565b60006020830151604080840152610d9f606084018261399e565b60008083601f840112613e9657600080fd5b5081356001600160401b03811115613ead57600080fd5b602083019150836020828501011115613ec557600080fd5b9250929050565b60008060008060608587031215613ee257600080fd5b843593506020850135925060408501356001600160401b03811115613f0657600080fd5b613f1287828801613e84565b95989497509550505050565b60008060408385031215613f3157600080fd5b50508035926020909101359150565b60018060a01b03815116825260208101516020830152604081015160408301526000606082015160806060850152610d9f608085018261399e565b6020815260006111226020830184613f40565b6000806040808486031215613fa257600080fd5b83356001600160401b0380821115613fb957600080fd5b818601915086601f830112613fcd57600080fd5b81356020613fda82613b30565b8551613fe68282613b04565b83815260059390931b850182019282810191508a84111561400657600080fd5b8286015b8481101561408e5780358681111561402157600080fd5b87016080818e03601f1901121561403757600080fd5b885161404281613ae5565b858201358152898201358682015260608201358a82015260808201358881111561406c5760008081fd5b61407a8f8883860101613c2e565b60608301525084525091830191830161400a565b50975061409e9050888201613bf7565b955050505050509250929050565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a08101610c8a565b60008082840360c08112156140fe57600080fd5b8335925060a0601f198201121561411457600080fd5b506020830190509250929050565b6020815261416560208201835180516001600160a01b03168252602080820151908301526040808201519083015260608082015190830152608090810151910152565b6000602083015160e060c0840152614181610100840182613f40565b604094909401516001600160a01b031660e093909301929092525090919050565b6000806000806000608086880312156141ba57600080fd5b85359450602086013593506040860135925060608601356001600160401b038111156141e557600080fd5b6141f188828901613e84565b969995985093965092949392505050565b6020815281511515602082015260006020830151604080840152805160c060608501528051604061012086015261423d61016086018261399e565b6020928301516101408701529183015160ff1660808601525060408201519061426b60a086018360ff169052565b606083015160ff1660c086015260808301516001600160401b0380821660e088015260a0909401519384166101008701529150612a06565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff8316806142e2576142e26142a3565b8060ff84160491505092915050565b60ff8181168382160190811115610c8a57610c8a6142b9565b600060ff83168061431d5761431d6142a3565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061435657607f821691505b602082108103610dd257634e487b7160e01b600052602260045260246000fd5b600060018201614388576143886142b9565b5060010190565b6020808252825182820181905260009190848201906040850190845b818110156143d05783516001600160a01b0316835292840192918401916001016143ab565b50909695505050505050565b60006143e783613c07565b6040516143f48282613b04565b80925084815285858501111561440957600080fd5b6138228560208301866138e6565b60006020828403121561442957600080fd5b81516001600160401b0381111561443f57600080fd5b8201601f8101841361445057600080fd5b610d9f848251602084016143dc565b60006020828403121561447157600080fd5b81516001600160401b038082111561448857600080fd5b908301906040828603121561449c57600080fd5b6040516144a881613aa1565b825161010081106144b857600080fd5b81526020830151828111156144cc57600080fd5b80840193505085601f8401126144e157600080fd5b6144f0868451602086016143dc565b602082015295945050505050565b6000602080838503121561451157600080fd5b82516001600160401b0381111561452757600080fd5b8301601f8101851361453857600080fd5b805161454381613b30565b6040516145508282613b04565b82815260059290921b830184019184810191508783111561457057600080fd5b928401925b82841015613bec57835161458881613a07565b82529284019290840190614575565b60006020808352600084546145ab81614342565b808487015260406001808416600081146145cc57600181146145e657614614565b60ff1985168984015283151560051b890183019550614614565b896000528660002060005b8581101561460c5781548b82018601529083019088016145f1565b8a0184019650505b509398975050505050505050565b600060033d111561463b5760046000803e5060005160e01c5b90565b600060443d101561464c5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561467b57505050505090565b82850191508151818111156146935750505050505090565b843d87010160208285010111156146ad5750505050505090565b6146bc60208286010187613b04565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b8152600082516146f38160118501602087016138e6565b9190910160110192915050565b60208082526029908201527f5769746e657452657175657374426f6172643a20756e617574686f72697a6564604082015268103932b837b93a32b960b91b606082015260800190565b60208082526042908201527f5769746e657452657175657374426f617264547275737461626c65446566617560408201527f6c743a205769746e65742064725478486173682063616e6e6f74206265207a65606082015261726f60f01b608082015260a00190565b6020808252603a908201527f5769746e657452657175657374426f617264547275737461626c65446566617560408201527f6c743a20726573756c742063616e6e6f7420626520656d707479000000000000606082015260800190565b6020808252602f90820152600080516020614b7b83398151915260408201526e2072657761726420746f6f206c6f7760881b606082015260800190565b80820180821115610c8a57610c8a6142b9565b60006020828403121561487057600080fd5b5051919050565b8082028115828204841417610c8a57610c8a6142b9565b601f821115612f1657600081815260208120601f850160051c810160208610156148b55750805b601f850160051c820191505b818110156148d4578281556001016148c1565b505050505050565b81516001600160401b038111156148f5576148f5613a8b565b614909816149038454614342565b8461488e565b602080601f83116001811461493e57600084156149265750858301515b600019600386901b1c1916600185901b1785556148d4565b600085815260208120601f198616915b8281101561496d5788860151825594840194600190910190840161494e565b508582101561498b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260408201527137b69032b93937b932b2103932b9bab63a1760711b606082015260800190565b600082516149ff8184602087016138e6565b9190910192915050565b60008351614a1b8184602088016138e6565b835190830190614a2f8183602088016138e6565b01949350505050565b634e487b7160e01b600052600160045260246000fd5b81810381811115610c8a57610c8a6142b956fe5769746e657452657175657374426f6172643a206e6f7420696e2044656c65746564207374617475735769746e65744572726f72734c69623a20617373657274696f6e206661696c65645769746e657452657175657374426f6172643a206e6f7420696e20506f73746564207374617475734df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f5769746e657452657175657374426f617264547275737461626c65426173653a206e6f742079657420736f6c7665645769746e657452657175657374426f617264547275737461626c65426173653a20756e6b6e6f776e2071756572795769746e657452657175657374426f6172643a206e6f7420696e205265706f72746564207374617475735769746e657452657175657374426f617264547275737461626c65426173653aa6db7263983f337bae2c9fb315730227961d1c1153ae1e10a56b5791465dd6fda2646970667358221220482507199615f0b475f567a0394a3c611a3d37cef38e7f95a203ec95afe851e264736f6c63430008110033