0x608060405234801561001057600080fd5b50614005806100206000396000f3fe60806040526004361061026a5760003560e01c806368c0193711610153578063ac9650d8116100cb578063ca15c8731161007f578063d547741f11610064578063d547741f14610806578063e30c397814610826578063f2fde38b1461083b57600080fd5b8063ca15c873146107c6578063cf2fd14d146107e657600080fd5b8063b614efd1116100b0578063b614efd114610773578063b9dde3de14610793578063bf6eac2f146107b357600080fd5b8063ac9650d814610726578063b064a86a1461075357600080fd5b80638d167683116101225780639010d07c116101075780639010d07c1461067f57806391d148541461069f578063a217fddf1461071157600080fd5b80638d167683146106255780638da5cb5b1461064557600080fd5b806368c01937146105c6578063715018a6146105e657806379ba5097146105fb5780638456cb591461061057600080fd5b806330c789f8116101e657806344c1bd00116101b55780635c975abb1161019a5780635c975abb1461054f5780636017bc031461058657806360829f8a146105a657600080fd5b806344c1bd00146105185780634854aa571461053a57600080fd5b806330c789f8146103e357806336568abe146104035780633f4ba83a1461042357806341865f481461043857600080fd5b80632671f7e61161023d5780632e60e43e116102225780632e60e43e146103835780632f2ff15d146103a35780632f87a3a3146103c357600080fd5b80632671f7e6146103435780632bc8200b1461036357600080fd5b806301ffc9a71461026f5780630afcccda146102a45780630c65a4fc146102d2578063248a9ca3146102f4575b600080fd5b34801561027b57600080fd5b5061028f61028a36600461391a565b61085b565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102c46102bf36600461391a565b6108b7565b60405190815260200161029b565b3480156102de57600080fd5b506102f26102ed366004613957565b610910565b005b34801561030057600080fd5b506102c461030f366004613974565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561034f57600080fd5b506102f261035e36600461398d565b610a20565b34801561036f57600080fd5b5061028f61037e36600461398d565b610a8f565b34801561038f57600080fd5b506102f261039e36600461398d565b610b0c565b3480156103af57600080fd5b506102f26103be3660046139c4565b610b5b565b3480156103cf57600080fd5b506102f26103de366004613957565b610ba5565b3480156103ef57600080fd5b506102f26103fe366004613a68565b610cac565b34801561040f57600080fd5b506102f261041e3660046139c4565b610d80565b34801561042f57600080fd5b506102f2610dde565b34801561044457600080fd5b5060408051606080820183526000808352602080840182905292840152825180820184527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460005473ffffffffffffffffffffffffffffffffffffffff9081168083527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460015482168386019081527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446002548316938701938452865191825251821694810194909452905116928201929092520161029b565b34801561052457600080fd5b5061052d610df1565b60405161029b9190613abc565b34801561054657600080fd5b5061052d610e21565b34801561055b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661028f565b34801561059257600080fd5b506102c46105a136600461391a565b610e4c565b3480156105b257600080fd5b506102c46105c1366004613b16565b610e79565b3480156105d257600080fd5b506102f26105e136600461398d565b610fe8565b3480156105f257600080fd5b506102f2611053565b34801561060757600080fd5b506102f261105b565b34801561061c57600080fd5b506102f2611063565b34801561063157600080fd5b506102f2610640366004613b57565b611074565b34801561065157600080fd5b5061065a6111f9565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b34801561068b57600080fd5b5061065a61069a366004613bf6565b611203565b3480156106ab57600080fd5b5061028f6106ba3660046139c4565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561071d57600080fd5b506102c4600081565b34801561073257600080fd5b50610746610741366004613c18565b611244565b60405161029b9190613cb1565b34801561075f57600080fd5b5061065a61076e366004613d67565b61132c565b34801561077f57600080fd5b506102f261078e366004613957565b61135a565b34801561079f57600080fd5b506102f26107ae366004613b57565b6114ea565b6102c46107c1366004613b16565b6115e7565b3480156107d257600080fd5b506102c46107e1366004613974565b611722565b3480156107f257600080fd5b506102f2610801366004613957565b61175a565b34801561081257600080fd5b506102f26108213660046139c4565b611766565b34801561083257600080fd5b5061065a6117aa565b34801561084757600080fd5b506102f2610856366004613957565b6117b4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806108b157506108b1826117bd565b92915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260408120600101546108b1565b61091933611854565b7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460006109647fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446006836118bc565b6109a65760026040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff909116600090815260089091016020526040902080547fffffffffffffffffffffff00000000000000000000000000000000000000000016815560010180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610a2933611854565b610a557fffffffff000000000000000000000000000000000000000000000000000000008316826118de565b610a8b576040517f442ec3e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b7fffffffff00000000000000000000000000000000000000000000000000000000821660009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff165b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a29576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b9581611935565b610b9f838361193f565b50505050565b610bae33611854565b7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446000610bf97fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446003836118bc565b610c325760026040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260059091016020526040902080547fffffffffffffffffffffff00000000000000000000000000000000000000000016815560010180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610cb533611854565b80517fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560208301517fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446001805483169184169190911790556040909201517fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600280549093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81163314610dcf576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dd982826118de565b505050565b610de733611854565b610def61198d565b565b6060610e1c7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446006611a2a565b905090565b6060610e1c7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446003611a2a565b60006108b17fffffffff000000000000000000000000000000000000000000000000000000008316611722565b73ffffffffffffffffffffffffffffffffffffffff831660009081527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600860205260408120547fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460009060049060ff166006811115610ef757610ef7613d91565b14610f315760036040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b60006040518060a00160405280610f453390565b73ffffffffffffffffffffffffffffffffffffffff9081168252878116602083015288811660408301526000606083015260809182018790526001850154835192840151939450610f999391169190611a37565b6001820154610fbe9073ffffffffffffffffffffffffffffffffffffffff1685611a9a565b606082018190529250610fd081611bcf565b610fdf86868360600151611c6d565b50509392505050565b610ff133611854565b61101d7fffffffff0000000000000000000000000000000000000000000000000000000083168261193f565b610a8b576040517f653574c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610def611c9d565b610def611caf565b61106c33611854565b610def611d27565b61107d33611854565b7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460006110c87fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600684611da0565b6111015760016040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b61110a82611dc2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008820160205260409020825181548492919082907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600681111561117157611171613d91565b0217905550602082015181547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff92831602178255604090920151600190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055505050565b6000610e1c611e11565b60008281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200060208190526040822061123c9084611e53565b949350505050565b6040805160008152602081019091526060908267ffffffffffffffff81111561126f5761126f6139e9565b6040519080825280602002602001820160405280156112a257816020015b606081526020019060019003908161128d5790505b50915060005b83811015611324576112ff308686848181106112c6576112c6613e3b565b90506020028101906112d89190613e6a565b856040516020016112eb93929190613ed6565b604051602081830303815290604052611e5f565b83828151811061131157611311613e3b565b60209081029190910101526001016112a8565b505092915050565b6000610b057fffffffff00000000000000000000000000000000000000000000000000000000841683611203565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113a55750825b905060008267ffffffffffffffff1660011480156113c25750303b155b9050811580156113d0575080155b15611407576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114685784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61147186611ed9565b611479611ef2565b611481611f02565b83156114e25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6114f333611854565b7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600061153e7fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600384611da0565b6115775760016040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b61158082611dc2565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005820160205260409020825181548492919082907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600681111561117157611171613d91565b60007fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460006116347fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600386611f0a565b61166d5760026040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b60006040518060a001604052806116813390565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600081525090506116f48682600001518360600151611a37565b611702868260600151611f39565b60808201819052925061171481612058565b610fdf8582608001516120eb565b60008181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610b05906122fe565b61176381612308565b50565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117a081611935565b610b9f83836118de565b6000610e1c6123bf565b611763816123e8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108b157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108b1565b8073ffffffffffffffffffffffffffffffffffffffff166118736111f9565b73ffffffffffffffffffffffffffffffffffffffff1614611763576117637fffffffff000000000000000000000000000000000000000000000000000000006000351682612440565b6000610b058373ffffffffffffffffffffffffffffffffffffffff84166124e7565b60007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320008161190c85856125da565b9050801561123c57600085815260208390526040902061192c90856118bc565b50949350505050565b6117638133612440565b60007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320008161196d85856126b8565b9050801561123c57600085815260208390526040902061192c9085611da0565b6119956127cf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b60606000610b058361282a565b73ffffffffffffffffffffffffffffffffffffffff8316611a8e57803414610dd95760056040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b610dd983833084612886565b73ffffffffffffffffffffffffffffffffffffffff821660009081527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446008602052604080822081516060810190925280547fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460009284929091829060ff166006811115611b2657611b26613d91565b6006811115611b3757611b37613d91565b8152815473ffffffffffffffffffffffffffffffffffffffff61010090910481166020808401919091526001909301541660409182015290820151908201518251929350611b95928892918891611b8d9061290f565b63ffffffff16565b9250600381516006811115611bac57611bac613d91565b03611bb85750506108b1565b611bc6816040015184611a9a565b95945050505050565b806040015173ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff167f844b93bba1dfa65e9a88d080df57fa731c72bebc9653aea6be132abde68c27c384606001518560800151604051611c62929190918252602082015260400190565b60405180910390a450565b73ffffffffffffffffffffffffffffffffffffffff8316611c9257610dd9828261298b565b610dd9838383612a61565b611ca5612a9f565b610def6000612af7565b3380611cb96117aa565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161099d565b61176381612af7565b611d2f612b00565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336119ff565b6000610b058373ffffffffffffffffffffffffffffffffffffffff8416612b5c565b600081516006811115611dd757611dd7613d91565b036117635760076040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000610b058383612bab565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051611e899190613efd565b600060405180830381855af49150503d8060008114611ec4576040519150601f19603f3d011682016040523d82523d6000602084013e611ec9565b606091505b5091509150611bc6858383612bd5565b611ee1612c64565b611eea81612ccb565b611763611f02565b611efa612c64565b610def612cdc565b610def612c64565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b05565b73ffffffffffffffffffffffffffffffffffffffff821660009081527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446005602052604080822081516060810190925280547fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca05954460009284929091829060ff166006811115611fc557611fc5613d91565b6006811115611fd657611fd6613d91565b8152815473ffffffffffffffffffffffffffffffffffffffff6101009091048116602080840191909152600190930154166040909101528101518151919250612027918791908790611b8d90612d2d565b925060038151600681111561203e5761203e613d91565b0361204a5750506108b1565b611bc6816040015184611f39565b806040015173ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff167f592d8fba044f9498232ce6c14dc7eb3a60f723f4d6731918aea4f6ae0c08104484606001518560800151604051611c62929190918252602082015260400190565b604080516060810182527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446000805473ffffffffffffffffffffffffffffffffffffffff9081168084527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca059544600154821660208501527fb0b439de8d47439e35f983f1b3239e3509479aa5b7772b24605dca0595446002549091169383019390935291156122ef57602081015181516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810186905291169063095ea7b3906044016020604051808303816000875af115801561220a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222e9190613f19565b508051602082015160408084015190517f540abf7300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015286821660448201526064810186905262030d40608482015260c060a4820152600060c482015291169063540abf739060e401600060405180830381600087803b1580156122d257600080fd5b505af11580156122e6573d6000803e3d6000fd5b50505050610b9f565b610b9f81602001518585611c6d565b60006108b1825490565b612310612a9f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556123796111f9565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611e36565b6123f0612a9f565b73ffffffffffffffffffffffffffffffffffffffff8116611d1e576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161099d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a8b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161099d565b600081815260018301602052604081205480156125d057600061250b600183613e01565b855490915060009061251f90600190613e01565b905080821461258457600086600001828154811061253f5761253f613e3b565b906000526020600020015490508087600001848154811061256257612562613e3b565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061259557612595613f3b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108b1565b60009150506108b1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16156125d05760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108b1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff166125d05760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561276b3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108b1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610def576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608160000180548060200260200160405190810160405280929190818152602001828054801561287a57602002820191906000526020600020905b815481526020019060010190808311612866575b50505050509050919050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610b9f9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612dda565b6138dd600282600681111561292657612926613d91565b036129345750612e70919050565b600382600681111561294857612948613d91565b036129565750612fae919050565b60036040517f1f9f24c700000000000000000000000000000000000000000000000000000000815260040161099d9190613dc0565b804710156129c7576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161099d565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612a21576040519150601f19603f3d011682016040523d82523d6000602084013e612a26565b606091505b5050905080610dd9576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610dd991859182169063a9059cbb906064016128c8565b33612aa86111f9565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161099d565b61176381613004565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610def576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600183016020526040812054612ba3575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108b1565b5060006108b1565b6000826000018281548110612bc257612bc2613e3b565b9060005260206000200154905092915050565b606082612bea57612be582613054565b610b05565b8151158015612c0e575073ffffffffffffffffffffffffffffffffffffffff84163b155b15612c5d576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161099d565b5092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610def576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cd3612c64565b61176381613096565b612ce4612c64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6138dd6001826006811115612d4457612d44613d91565b03612d52575061309e919050565b6004826006811115612d6657612d66613d91565b03612d7457506132b0919050565b6003826006811115612d8857612d88613d91565b03612d9657506133e0919050565b6005826006811115612daa57612daa613d91565b03612db857506134df919050565b6006826006811115612dcc57612dcc613d91565b036129565750613535919050565b6000612dfc73ffffffffffffffffffffffffffffffffffffffff841683613776565b90508051600014158015612e21575080806020019051810190612e1f9190613f19565b155b15610dd9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161099d565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490526000919086169063095ea7b3906044016020604051808303816000875af1158015612ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0d9190613f19565b506040517f60829f8a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152306024830152604482018590528516906360829f8a906064015b6020604051808303816000875af1158015612f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc69190613f6a565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081526004810183905260009073ffffffffffffffffffffffffffffffffffffffff85169063de0e9a3e90602401612f6b565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155610a8b82613784565b8051156130645780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123f0612c64565b6000808373ffffffffffffffffffffffffffffffffffffffff16630de371e26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131109190613f83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa15801561317d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a19190613f6a565b91508373ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b815260040160206040518083038185885af11580156131f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132159190613f6a565b506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a69190613f6a565b611bc69190613e01565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390526000919085169063095ea7b3906044016020604051808303816000875af1158015613329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334d9190613f19565b506040517fea598cb00000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff84169063ea598cb0906024015b6020604051808303816000875af11580156133bc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190613f6a565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390526000919085169063095ea7b3906044016020604051808303816000875af1158015613459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347d9190613f19565b506040517fbf6eac2f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301526044820184905284169063bf6eac2f9060640161339d565b6040517fde0e9a3e0000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff84169063de0e9a3e9060240161339d565b6000808373ffffffffffffffffffffffffffffffffffffffff16630de371e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a79190613f83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa158015613614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136389190613f6a565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690529193509086169063095ea7b3906044016020604051808303816000875af11580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d59190613f19565b506040517fb6f086f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526000604483015285169063b6f086f4906064016020604051808303816000875af1158015613752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132159190613f6a565b6060610b058383600061381a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b606081471015613858576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161099d565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516138819190613efd565b60006040518083038185875af1925050503d80600081146138be576040519150601f19603f3d011682016040523d82523d6000602084013e6138c3565b606091505b50915091506138d3868383612bd5565b9695505050505050565b610def613fa0565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461391557600080fd5b919050565b60006020828403121561392c57600080fd5b610b05826138e5565b73ffffffffffffffffffffffffffffffffffffffff8116811461176357600080fd5b60006020828403121561396957600080fd5b8135610b0581613935565b60006020828403121561398657600080fd5b5035919050565b600080604083850312156139a057600080fd5b6139a9836138e5565b915060208301356139b981613935565b809150509250929050565b600080604083850312156139d757600080fd5b8235915060208301356139b981613935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715613a62577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600060608284031215613a7a57600080fd5b613a82613a18565b8235613a8d81613935565b81526020830135613a9d81613935565b60208201526040830135613ab081613935565b60408201529392505050565b6020808252825182820181905260009190848201906040850190845b81811015613b0a57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613ad8565b50909695505050505050565b600080600060608486031215613b2b57600080fd5b8335613b3681613935565b92506020840135613b4681613935565b929592945050506040919091013590565b6000808284036080811215613b6b57600080fd5b8335613b7681613935565b925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215613ba857600080fd5b50613bb1613a18565b602084013560078110613bc357600080fd5b81526040840135613bd381613935565b60208201526060840135613be681613935565b6040820152919491935090915050565b60008060408385031215613c0957600080fd5b50508035926020909101359150565b60008060208385031215613c2b57600080fd5b823567ffffffffffffffff80821115613c4357600080fd5b818501915085601f830112613c5757600080fd5b813581811115613c6657600080fd5b8660208260051b8501011115613c7b57600080fd5b60209290920196919550909350505050565b60005b83811015613ca8578181015183820152602001613c90565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d5a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281518051808752613d1d818989018a8501613c8d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01695909501860194509285019290850190600101613cd8565b5092979650505050505050565b60008060408385031215613d7a57600080fd5b613d83836138e5565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160098310613dfb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b818103818111156108b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e9f57600080fd5b83018035915067ffffffffffffffff821115613eba57600080fd5b602001915036819003821315613ecf57600080fd5b9250929050565b828482376000838201600081528351613ef3818360208801613c8d565b0195945050505050565b60008251613f0f818460208701613c8d565b9190910192915050565b600060208284031215613f2b57600080fd5b81518015158114610b0557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215613f7c57600080fd5b5051919050565b600060208284031215613f9557600080fd5b8151610b0581613935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfea26469706673582212204a5b80b3f691d35c7f6d3605cfaed743246d361a2d440810ef5a50d06f13ab3b64736f6c63430008160033