0x60e060405234801561001057600080fd5b50604051613a08380380613a0883398101604081905261002f91610112565b8181816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100939190610145565b6001600160a01b03821660805281600660ff831610156100c6576040516301e9714b60e41b815260040160405180910390fd5b6100d1600683610185565b6100dc90600a610288565b60a0525050506001600160a01b031660c052506102979050565b80516001600160a01b038116811461010d57600080fd5b919050565b6000806040838503121561012557600080fd5b61012e836100f6565b915061013c602084016100f6565b90509250929050565b60006020828403121561015757600080fd5b815160ff8116811461016857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561019e5761019e61016f565b92915050565b600181815b808511156101df5781600019048211156101c5576101c561016f565b808516156101d257918102915b93841c93908002906101a9565b509250929050565b6000826101f65750600161019e565b816102035750600061019e565b816001811461021957600281146102235761023f565b600191505061019e565b60ff8411156102345761023461016f565b50506001821b61019e565b5060208310610133831016604e8410600b8410161715610262575081810a61019e565b61026c83836101a4565b80600019048211156102805761028061016f565b029392505050565b600061016860ff8416836101e7565b60805160a05160c0516136ee61031a6000396000818161070101528181611c6b0152611e7801526000818161054001528181611db801528181611e2d0152611f2b01526000818161044a0152818161085b015281816114320152818161178901528181611a4e01528181611ccf01528181612146015261223f01526136ee6000f3fe6080604052600436106102195760003560e01c8063857749b01161011d578063bd815db0116100b0578063d045a0dc1161007f578063f2fde38b11610064578063f2fde38b146106d2578063fc0c546a146106f2578063ff7bd03d1461072557600080fd5b8063d045a0dc1461069f578063d4243885146106b257600080fd5b8063bd815db01461062b578063c4d66de81461063e578063c7c7f5b31461065e578063ca5eb5e11461067f57600080fd5b8063b731ea0a116100ec578063b731ea0a14610584578063b98bd07014610599578063bb0b6a53146105b9578063bc70b3541461060b57600080fd5b8063857749b0146104fd5780638da5cb5b14610519578063963efcaa1461052e5780639f68b9641461057057600080fd5b80633b6f743b116101b05780635e280f111161017f578063715018a611610164578063715018a61461048c5780637d25a05e146104a157806382413eac146104dd57600080fd5b80635e280f11146104385780636fc1b31e1461046c57600080fd5b80633b6f743b1461036557806352ae2879146103925780635535d461146103a55780635a0dfe4d146103d257600080fd5b8063156a0d0f116101ec578063156a0d0f146102cd57806317442b701461030e5780631f5e1334146103305780633400288b1461034557600080fd5b80630d35b4151461021e578063111ecdad1461025657806313137d6514610290578063134d4f25146102a5575b600080fd5b34801561022a57600080fd5b5061023e6102393660046125bd565b610745565b60405161024d93929190612660565b60405180910390f35b34801561026257600080fd5b5061026b610817565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024d565b6102a361029e366004612794565b610859565b005b3480156102b157600080fd5b506102ba600281565b60405161ffff909116815260200161024d565b3480156102d957600080fd5b50604080517f02e49c2c000000000000000000000000000000000000000000000000000000008152600160208201520161024d565b34801561031a57600080fd5b506040805160018152600260208201520161024d565b34801561033c57600080fd5b506102ba600181565b34801561035157600080fd5b506102a361036036600461284d565b610958565b34801561037157600080fd5b50610385610380366004612885565b6109d7565b60405161024d91906128d7565b34801561039e57600080fd5b503061026b565b3480156103b157600080fd5b506103c56103c0366004612900565b610a40565b60405161024d9190612933565b3480156103de57600080fd5b506104286103ed36600461284d565b63ffffffff9190911660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90060205260409020541490565b604051901515815260200161024d565b34801561044457600080fd5b5061026b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047857600080fd5b506102a3610487366004612946565b610b1b565b34801561049857600080fd5b506102a3610bbc565b3480156104ad57600080fd5b506104c46104bc36600461284d565b600092915050565b60405167ffffffffffffffff909116815260200161024d565b3480156104e957600080fd5b506104286104f8366004612963565b610bd0565b34801561050957600080fd5b506040516006815260200161024d565b34801561052557600080fd5b5061026b610bf2565b34801561053a57600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161024d565b34801561057c57600080fd5b506001610428565b34801561059057600080fd5b5061026b610c1b565b3480156105a557600080fd5b506102a36105b4366004612a0f565b610c44565b3480156105c557600080fd5b506105626105d4366004612a51565b63ffffffff1660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602052604090205490565b34801561061757600080fd5b506103c5610626366004612a6c565b610dc5565b6102a3610639366004612a0f565b610f74565b34801561064a57600080fd5b506102a3610659366004612946565b611161565b61067161066c366004612acd565b6112ea565b60405161024d929190612b59565b34801561068b57600080fd5b506102a361069a366004612946565b6113e5565b6102a36106ad366004612794565b611491565b3480156106be57600080fd5b506102a36106cd366004612946565b6114d9565b3480156106de57600080fd5b506102a36106ed366004612946565b611572565b3480156106fe57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061026b565b34801561073157600080fd5b50610428610740366004612bac565b6115d6565b60408051808201909152600080825260208201526060610778604051806040016040528060008152602001600081525090565b604080518082018252600080825267ffffffffffffffff6020808401829052845183815290810190945291955091826107d4565b6040805180820190915260008152606060208201528152602001906001900390816107ac5790505b5093506000806107f9604089013560608a01356107f460208c018c612a51565b6115f4565b60408051808201909152918252602082015296989597505050505050565b6000807f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108cf576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906108e9906108e4908a612a51565b611651565b14610940576108fb6020880188612a51565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108c6565b61094f878787878787876116ce565b50505050505050565b610960611868565b63ffffffff821660008181527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f900602081815260409283902085905582519384528301849052917f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b91015b60405180910390a1505050565b60408051808201909152600080825260208201526000610a07604085013560608601356107f46020880188612a51565b915050600080610a1786846118c0565b9092509050610a34610a2c6020880188612a51565b838388611a38565b93505050505b92915050565b63ffffffff821660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff8616855290915290912080546060929190610a9490612bf7565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac090612bf7565b8015610b0d5780601f10610ae257610100808354040283529160200191610b0d565b820191906000526020600020905b815481529060010190602001808311610af057829003601f168201915b505050505091505092915050565b610b23611868565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a15050565b610bc4611868565b610bce6000611b26565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930061083c565b6000807fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b60061083c565b610c4c611868565b7f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea000060005b82811015610d9357610cb2848483818110610c8d57610c8d612c44565b9050602002810190610c9f9190612c73565b610cad906040810190612cb1565b611bbc565b838382818110610cc457610cc4612c44565b9050602002810190610cd69190612c73565b610ce4906040810190612cb1565b836000878786818110610cf957610cf9612c44565b9050602002810190610d0b9190612c73565b610d19906020810190612a51565b63ffffffff1663ffffffff1681526020019081526020016000206000878786818110610d4757610d47612c44565b9050602002810190610d599190612c73565b610d6a906040810190602001612d16565b61ffff168152602081019190915260400160002091610d8a919083612d79565b50600101610c70565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67483836040516109ca929190612edc565b63ffffffff841660009081527f8d2bda5d9f6ffb5796910376005392955773acee5548d0fcdb10e7c264ea00006020818152604080842061ffff88168552909152822080546060939190610e1890612bf7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490612bf7565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b505050505090508051600003610ee25784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610bea945050505050565b6000849003610ef4579150610bea9050565b60028410610f3e57610f068585611bbc565b80610f14856002818961301a565b604051602001610f2693929190613044565b60405160208183030381529060405292505050610bea565b84846040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108c692919061306c565b60005b8181101561109c5736838383818110610f9257610f92612c44565b9050602002810190610fa49190613080565b9050610ff6610fb66020830183612a51565b602083013563ffffffff9190911660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90060205260409020541490565b6110005750611094565b3063d045a0dc60c08301358360a081013561101f610100830183612cb1565b611030610100890160e08a01612946565b61103e6101208a018a612cb1565b6040518963ffffffff1660e01b815260040161106097969594939291906130ca565b6000604051808303818588803b15801561107957600080fd5b505af115801561108d573d6000803e3d6000fd5b5050505050505b600101610f77565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261112e9190810190613187565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108c69190612933565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156111ac5750825b905060008267ffffffffffffffff1660011480156111c95750303b155b9050811580156111d7575080155b1561120e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561126f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61127886611c1c565b61128186611c2d565b83156112e25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6112f261255d565b604080518082019091526000808252602082015260008061132933604089013560608a013561132460208c018c612a51565b611c3e565b9150915060008061133a89846118c0565b909250905061136661134f60208b018b612a51565b8383611360368d90038d018d613247565b8b611c9c565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906113b4908d018d612a51565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6113ed611868565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561147657600080fd5b505af115801561148a573d6000803e3d6000fd5b5050505050565b3330146114ca576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094f87878787878787610940565b6114e1611868565b7fefb041d771d6daaa55702fff6eb740d63ba559a75d2d1d3e151c78ff2480b60080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610bb0565b61157a611868565b73ffffffffffffffffffffffffffffffffffffffff81166115ca576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016108c6565b6115d381611b26565b50565b6000602082018035906115ed906105d49085612a51565b1492915050565b60008061160085611db4565b915081905083811015611649576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108c6565b935093915050565b63ffffffff811660009081527f72ab1bc1039b79dc4724ffca13de82c96834302d3c7e0d4252232d4b2dd8f90060208190526040822054806116c7576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024016108c6565b9392505050565b60006116e06116dd8787611deb565b90565b9050600061170c826116fa6116f58a8a611e03565b611e26565b61170760208d018d612a51565b611e5c565b905060288611156117f957600061174961172c60608c0160408d01613279565b61173960208d018d612a51565b846117448c8c611ea7565b611ef2565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906117c59086908d906000908790600401613296565b600060405180830381600087803b1580156117df57600080fd5b505af11580156117f3573d6000803e3d6000fd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61183f60208d018d612a51565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b33611871610bf2565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108c6565b606080600061191d85602001356118d686611f24565b6118e360a0890189612cb1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f5092505050565b9093509050600081611930576001611933565b60025b90506119536119456020880188612a51565b8261062660808a018a612cb1565b7f41db8a78b0206aba5c54bcbfc2bda0d84082a84eb88e680379a57b9e9f653c0080549194509073ffffffffffffffffffffffffffffffffffffffff168015611a2d576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119ea90899089906004016132d5565b602060405180830381865afa158015611a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2b91906132fa565b505b505050509250929050565b60408051808201909152600080825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611aa889611651565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611add929190613317565b6040805180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d91906133eb565b95945050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000611bcb600282848661301a565b611bd491613407565b60f01c905060038114611c175782826040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108c692919061306c565b505050565b611c24611fe2565b6115d381612049565b611c35611fe2565b6115d38161206a565b600080611c4c8585856115f4565b9092509050611c9373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085612072565b94509492505050565b611ca461255d565b6000611cb38460000151612101565b602085015190915015611ccd57611ccd8460200151612142565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611d2a8c611651565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611d66929190613317565b60806040518083038185885af1158015611d84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611da9919061344f565b979650505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611de181846134b7565b610a3a91906134f2565b6000611dfa602082848661301a565b6116c791613530565b6000611e1360286020848661301a565b611e1c9161356c565b60c01c9392505050565b6000610a3a7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff84166134f2565b6000611e9f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585612268565b509092915050565b6060611eb6826028818661301a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611f0b94939291906135b2565b6040516020818303038152906040529050949350505050565b6000610a3a7f0000000000000000000000000000000000000000000000000000000000000000836134b7565b8051606090151580611fb1578484604051602001611f9d92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611fd8565b84843385604051602001611fc89493929190613630565b6040516020818303038152906040525b9150935093915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610bce576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612051611fe2565b61205a816122a6565b6120626122b7565b6115d36122b7565b61157a611fe2565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526120fb9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122bf565b50505050565b600081341461213e576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108c6565b5090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d39190613689565b905073ffffffffffffffffffffffffffffffffffffffff8116612222576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61226473ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085612072565b5050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611c1791859182169063a9059cbb906064016120b4565b6122ae611fe2565b61205a81612355565b610bce611fe2565b60006122e173ffffffffffffffffffffffffffffffffffffffff841683612366565b9050805160001415801561230657508080602001905181019061230491906132fa565b155b15611c17576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016108c6565b61235d611fe2565b6115d381612374565b60606116c7838360006123c9565b61237c611fe2565b73ffffffffffffffffffffffffffffffffffffffff81166113ed576040517fb586360400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612407576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016108c6565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161243091906136a6565b60006040518083038185875af1925050503d806000811461246d576040519150601f19603f3d011682016040523d82523d6000602084013e612472565b606091505b509150915061248286838361248c565b9695505050505050565b6060826124a15761249c8261251b565b6116c7565b81511580156124c5575073ffffffffffffffffffffffffffffffffffffffff84163b155b15612514576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108c6565b50806116c7565b80511561252b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806060016040528060008019168152602001600067ffffffffffffffff1681526020016125a0604051806040016040528060008152602001600081525090565b905290565b600060e082840312156125b757600080fd5b50919050565b6000602082840312156125cf57600080fd5b813567ffffffffffffffff8111156125e657600080fd5b610bea848285016125a5565b60005b8381101561260d5781810151838201526020016125f5565b50506000910152565b6000815180845261262e8160208601602086016125f2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156126f9578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400185528151805188528301518388018790526126e687890182612616565b975050938201939082019060010161269c565b50508751606088015250505060208501516080850152509050610bea565b6000606082840312156125b757600080fd5b60008083601f84011261273b57600080fd5b50813567ffffffffffffffff81111561275357600080fd5b60208301915083602082850101111561276b57600080fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146115d357600080fd5b600080600080600080600060e0888a0312156127af57600080fd5b6127b98989612717565b965060608801359550608088013567ffffffffffffffff808211156127dd57600080fd5b6127e98b838c01612729565b909750955060a08a013591506127fe82612772565b90935060c0890135908082111561281457600080fd5b506128218a828b01612729565b989b979a50959850939692959293505050565b803563ffffffff8116811461284857600080fd5b919050565b6000806040838503121561286057600080fd5b61286983612834565b946020939093013593505050565b80151581146115d357600080fd5b6000806040838503121561289857600080fd5b823567ffffffffffffffff8111156128af57600080fd5b6128bb858286016125a5565b92505060208301356128cc81612877565b809150509250929050565b815181526020808301519082015260408101610a3a565b803561ffff8116811461284857600080fd5b6000806040838503121561291357600080fd5b61291c83612834565b915061292a602084016128ee565b90509250929050565b6020815260006116c76020830184612616565b60006020828403121561295857600080fd5b81356116c781612772565b60008060008060a0858703121561297957600080fd5b6129838686612717565b9350606085013567ffffffffffffffff81111561299f57600080fd5b6129ab87828801612729565b90945092505060808501356129bf81612772565b939692955090935050565b60008083601f8401126129dc57600080fd5b50813567ffffffffffffffff8111156129f457600080fd5b6020830191508360208260051b850101111561276b57600080fd5b60008060208385031215612a2257600080fd5b823567ffffffffffffffff811115612a3957600080fd5b612a45858286016129ca565b90969095509350505050565b600060208284031215612a6357600080fd5b6116c782612834565b60008060008060608587031215612a8257600080fd5b612a8b85612834565b9350612a99602086016128ee565b9250604085013567ffffffffffffffff811115612ab557600080fd5b612ac187828801612729565b95989497509550505050565b60008060008385036080811215612ae357600080fd5b843567ffffffffffffffff811115612afa57600080fd5b612b06878288016125a5565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612b3957600080fd5b506020840191506060840135612b4e81612772565b809150509250925092565b600060c0820190508351825267ffffffffffffffff60208501511660208301526040840151612b95604084018280518252602090810151910152565b5082516080830152602083015160a08301526116c7565b600060608284031215612bbe57600080fd5b6116c78383612717565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680612c0b57607f821691505b6020821081036125b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612ca757600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612ce657600080fd5b83018035915067ffffffffffffffff821115612d0157600080fd5b60200191503681900382131561276b57600080fd5b600060208284031215612d2857600080fd5b6116c7826128ee565b601f821115611c17576000816000526020600020601f850160051c81016020861015612d5a5750805b601f850160051c820191505b818110156112e257828155600101612d66565b67ffffffffffffffff831115612d9157612d91612bc8565b612da583612d9f8354612bf7565b83612d31565b6000601f841160018114612df75760008515612dc15750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561148a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612e465786850135825560209485019460019092019101612e26565b5086821015612e81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208082528181018390526000906040808401600586901b8501820187855b8881101561300c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18b3603018112612f5c57600080fd5b8a01606063ffffffff612f6e83612834565b16855261ffff612f7f8984016128ee565b1688860152868201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112612fb857600080fd5b90910187810191903567ffffffffffffffff811115612fd657600080fd5b803603831315612fe557600080fd5b8188870152612ff78287018285612e93565b96890196955050509186019150600101612efb565b509098975050505050505050565b6000808585111561302a57600080fd5b8386111561303757600080fd5b5050820193919092039150565b600084516130568184602089016125f2565b8201838582376000930192835250909392505050565b602081526000610bea602083018486612e93565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612ca757600080fd5b67ffffffffffffffff811681146115d357600080fd5b63ffffffff6130d889612834565b16815260208801356020820152600060408901356130f5816130b4565b67ffffffffffffffff811660408401525087606083015260e0608083015261312160e083018789612e93565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152613150818587612e93565b9a9950505050505050505050565b6040805190810167ffffffffffffffff8111828210171561318157613181612bc8565b60405290565b60006020828403121561319957600080fd5b815167ffffffffffffffff808211156131b157600080fd5b818401915084601f8301126131c557600080fd5b8151818111156131d7576131d7612bc8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561321d5761321d612bc8565b8160405282815287602084870101111561323657600080fd5b611da98360208301602088016125f2565b60006040828403121561325957600080fd5b61326161315e565b82358152602083013560208201528091505092915050565b60006020828403121561328b57600080fd5b81356116c7816130b4565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff831660408201526080606082015260006124826080830184612616565b6040815260006132e86040830185612616565b8281036020840152611b1d8185612616565b60006020828403121561330c57600080fd5b81516116c781612877565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261334d60e0840182612616565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526133888282612616565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b6000604082840312156133cd57600080fd5b6133d561315e565b9050815181526020820151602082015292915050565b6000604082840312156133fd57600080fd5b6116c783836133bb565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156134475780818660020360031b1b83161692505b505092915050565b60006080828403121561346157600080fd5b6040516060810181811067ffffffffffffffff8211171561348457613484612bc8565b604052825181526020830151613499816130b4565b60208201526134ab84604085016133bb565b60408201529392505050565b6000826134ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610a3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80356020831015610a3a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156134475760089490940360031b84901b1690921692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201526000825161362081602c8501602087016125f2565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b166020820152826028820152600082516136798160488501602087016125f2565b9190910160480195945050505050565b60006020828403121561369b57600080fd5b81516116c781612772565b60008251612ca78184602087016125f256fea2646970667358221220018ec1b8b26d679abb57d717c794b21d6cce336fc4a192b25d486a9ec7118dfb64736f6c634300081900330000000000000000000000004956b52ae2ff65d74ca2d61207523288e4528f960000000000000000000000001a44076050125825900e736c501f859c50fe728c