<?xml version="1.0" encoding="utf-8"?>
<ns1:informationTable xmlns:ns1="http://www.sec.gov/edgar/document/thirteenf/informationtable">
  <ns1:infoTable>
    <ns1:nameOfIssuer>AAON INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.004</ns1:titleOfClass>
    <ns1:cusip>000360206</ns1:cusip>
    <ns1:figi>BBG001S6CZK0</ns1:figi>
    <ns1:value>105112085</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1270237</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1203112</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>67125</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AGILYSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>00847J105</ns1:cusip>
    <ns1:figi>BBG001S5V6V3</ns1:figi>
    <ns1:value>48641335</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>683741</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>663226</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20515</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHA TEKNOVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>02080L102</ns1:cusip>
    <ns1:figi>BBG00201BVP4</ns1:figi>
    <ns1:value>916373</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>317084</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>317084</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL A</ns1:titleOfClass>
    <ns1:cusip>02079K305</ns1:cusip>
    <ns1:figi>BBG009S39JY5</ns1:figi>
    <ns1:value>842551</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2930</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2930</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL C</ns1:titleOfClass>
    <ns1:cusip>02079K107</ns1:cusip>
    <ns1:figi>BBG009S3NB21</ns1:figi>
    <ns1:value>621052</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2165</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2165</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>APPLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>037833100</ns1:cusip>
    <ns1:figi>BBG001S5N8V8</ns1:figi>
    <ns1:value>338810</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1335</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1335</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ARTIVION INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>228903100</ns1:cusip>
    <ns1:figi>BBG001SB3CB0</ns1:figi>
    <ns1:value>43043514</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1175410</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1140040</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>35370</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AZENTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>114340102</ns1:cusip>
    <ns1:figi>BBG001S8F1B8</ns1:figi>
    <ns1:value>60105257</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2844546</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2757336</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>87210</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BADGER METER INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>056525108</ns1:cusip>
    <ns1:figi>BBG001S5P8Q2</ns1:figi>
    <ns1:value>18686946</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>122658</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>119328</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3330</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BALCHEM CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>057665200</ns1:cusip>
    <ns1:figi>BBG001S5P2R4</ns1:figi>
    <ns1:value>212051448</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1251189</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1189762</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>61427</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BERKSHIRE HATHAWAY INC DEL</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL B NEW</ns1:titleOfClass>
    <ns1:cusip>084670702</ns1:cusip>
    <ns1:figi>BBG001S90346</ns1:figi>
    <ns1:value>582228</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1215</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1215</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIOLIFE SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>09062W204</ns1:cusip>
    <ns1:figi>BBG001SFGWZ7</ns1:figi>
    <ns1:value>1764366</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>92472</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>92472</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIO-TECHNE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09073M104</ns1:cusip>
    <ns1:figi>BBG001S66C28</ns1:figi>
    <ns1:value>23591000</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>451416</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>433636</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17780</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BLACKLINE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09239B109</ns1:cusip>
    <ns1:figi>BBG0029KJVD8</ns1:figi>
    <ns1:value>62362908</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1685484</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1637224</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>48260</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BOWMAN CONSULTING GROUP LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>103002101</ns1:cusip>
    <ns1:figi>BBG003BPV1R9</ns1:figi>
    <ns1:value>1892113</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>66530</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>66530</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BRIGHT HORIZONS FAM SOL IN D</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>109194100</ns1:cusip>
    <ns1:figi>BBG003LFWPT4</ns1:figi>
    <ns1:value>106206081</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1293146</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1235366</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>57780</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CACI INTL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>127190304</ns1:cusip>
    <ns1:figi>BBG001SF9NK1</ns1:figi>
    <ns1:value>14733438</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>27090</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>25995</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>1095</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CASELLA WASTE SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>147448104</ns1:cusip>
    <ns1:figi>BBG001SB5S05</ns1:figi>
    <ns1:value>222507046</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2804475</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2672170</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>132305</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CCC INTELLIGENT SOLUTIONS HL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>12510Q100</ns1:cusip>
    <ns1:figi>BBG00WNSJM58</ns1:figi>
    <ns1:value>31442952</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5240492</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5026557</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>213935</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CLEARWATER ANALYTICS HLDGS I</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>185123106</ns1:cusip>
    <ns1:figi>BBG012C765M3</ns1:figi>
    <ns1:value>14982819</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>633523</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>575493</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>58030</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CLIMB GLOBAL SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>946760105</ns1:cusip>
    <ns1:figi>BBG001S5T4D1</ns1:figi>
    <ns1:value>1433977</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>72350</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>72350</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CONSTRUCTION PARTNERS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>21044C107</ns1:cusip>
    <ns1:figi>BBG00KK0CFZ7</ns1:figi>
    <ns1:value>183803814</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1654102</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1569419</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>84683</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COPART INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>217204106</ns1:cusip>
    <ns1:figi>BBG001S7MTB1</ns1:figi>
    <ns1:value>255574</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>7698</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7698</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTAR GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160N109</ns1:cusip>
    <ns1:figi>BBG001SD3DY9</ns1:figi>
    <ns1:value>317032</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>7859</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7859</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTCO WHOLESALE CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160K105</ns1:cusip>
    <ns1:figi>BBG001S9KRQ7</ns1:figi>
    <ns1:value>931662</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>935</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>935</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CRANE NXT CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>224441105</ns1:cusip>
    <ns1:figi>BBG017BXPZ94</ns1:figi>
    <ns1:value>14770634</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>363898</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>353056</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10842</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CRYOPORT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.001</ns1:titleOfClass>
    <ns1:cusip>229050307</ns1:cusip>
    <ns1:figi>BBG001SLKBJ3</ns1:figi>
    <ns1:value>1323674</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>159864</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>159864</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CSW INDUSTRIALS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>126402106</ns1:cusip>
    <ns1:figi>BBG007NLG4M2</ns1:figi>
    <ns1:value>150728317</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>578434</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>553091</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>25343</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DANAHER CORP DEL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>235851102</ns1:cusip>
    <ns1:figi>BBG001S5QGT0</ns1:figi>
    <ns1:value>221832</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1170</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1170</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DESCARTES SYS GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>249906108</ns1:cusip>
    <ns1:figi>BBG001SBJY34</ns1:figi>
    <ns1:value>151086059</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2111320</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2004890</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>106430</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DIGI INTL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>253798102</ns1:cusip>
    <ns1:figi>BBG001S5Z4V4</ns1:figi>
    <ns1:value>144830059</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3004773</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2901183</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>103590</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ELECTROVAYA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>28617B606</ns1:cusip>
    <ns1:figi>BBG001SGDN51</ns1:figi>
    <ns1:value>2059162</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>263320</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>263320</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ENERGY RECOVERY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>29270J100</ns1:cusip>
    <ns1:figi>BBG001T28M86</ns1:figi>
    <ns1:value>1346611</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>133725</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>133725</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ENPRO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>29355X107</ns1:cusip>
    <ns1:figi>BBG001SCK8H2</ns1:figi>
    <ns1:value>20139727</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>80350</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>76145</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4205</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ESCO TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>296315104</ns1:cusip>
    <ns1:figi>BBG001S6MFD1</ns1:figi>
    <ns1:value>152440929</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>541781</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>520144</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>21637</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EVI INDS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>26929N102</ns1:cusip>
    <ns1:figi>BBG001SDGWV6</ns1:figi>
    <ns1:value>14444608</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>701876</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>644636</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>57240</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXPONENT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30214U102</ns1:cusip>
    <ns1:figi>BBG001S9CG99</ns1:figi>
    <ns1:value>124399422</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1906505</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1807749</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>98756</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXXON MOBIL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30231G102</ns1:cusip>
    <ns1:figi>BBG001S69V32</ns1:figi>
    <ns1:value>319639</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1884</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1884</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FASTENAL CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>311900104</ns1:cusip>
    <ns1:figi>BBG001S5R1F7</ns1:figi>
    <ns1:value>790656</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>17040</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>17040</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FEDERAL SIGNAL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>313855108</ns1:cusip>
    <ns1:figi>BBG001S5RD98</ns1:figi>
    <ns1:value>93099511</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>860917</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>826374</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34543</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FIRSTSERVICE CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>33767E202</ns1:cusip>
    <ns1:figi>BBG0093LLBP5</ns1:figi>
    <ns1:value>195289106</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1405564</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1337192</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>68372</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FORTINET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>34959E109</ns1:cusip>
    <ns1:figi>BBG001S77BL6</ns1:figi>
    <ns1:value>267470</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3273</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3273</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GENERAC HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>368736104</ns1:cusip>
    <ns1:figi>BBG001T5VGH6</ns1:figi>
    <ns1:value>254906</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1305</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1305</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GRACO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>384109104</ns1:cusip>
    <ns1:figi>BBG001S5RK56</ns1:figi>
    <ns1:value>45765261</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>540641</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>500551</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>40090</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GRAHAM CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>384556106</ns1:cusip>
    <ns1:figi>BBG001S5RK92</ns1:figi>
    <ns1:value>1684153</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>21340</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>21340</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GUIDEWIRE SOFTWARE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>40171V100</ns1:cusip>
    <ns1:figi>BBG001TWHGX5</ns1:figi>
    <ns1:value>41105220</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>274841</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>254476</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20365</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HEICO CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>422806208</ns1:cusip>
    <ns1:figi>BBG001S96YM2</ns1:figi>
    <ns1:value>39239098</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>185888</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>178113</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>7775</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HELIOS TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>42328H109</ns1:cusip>
    <ns1:figi>BBG001S99DF3</ns1:figi>
    <ns1:value>85754051</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1325206</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1285753</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>39453</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HENRY JACK &amp; ASSOC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>426281101</ns1:cusip>
    <ns1:figi>BBG001S5SHB5</ns1:figi>
    <ns1:value>39085030</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>247311</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>229471</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17840</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HILLMAN SOLUTIONS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>431636109</ns1:cusip>
    <ns1:figi>BBG00YC6W7C4</ns1:figi>
    <ns1:value>2052835</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>246735</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>246735</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HOME DEPOT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>437076102</ns1:cusip>
    <ns1:figi>BBG001S5RTW7</ns1:figi>
    <ns1:value>213778</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>650</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>650</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IDEXX LABS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>45168D104</ns1:cusip>
    <ns1:figi>BBG001S5S4Y9</ns1:figi>
    <ns1:value>443893</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>790</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>790</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ILLINOIS TOOL WKS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>452308109</ns1:cusip>
    <ns1:figi>BBG001S5SDX0</ns1:figi>
    <ns1:value>236864</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>910</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>910</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>INTUIT</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>461202103</ns1:cusip>
    <ns1:figi>BBG001S6TWR2</ns1:figi>
    <ns1:value>343742</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>795</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>795</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>INVESCO EXCH TRADED FD TR II</ns1:nameOfIssuer>
    <ns1:titleOfClass>PFD ETF</ns1:titleOfClass>
    <ns1:cusip>46138E511</ns1:cusip>
    <ns1:figi>BBG001T0NSB6</ns1:figi>
    <ns1:value>123488</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>11350</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>11350</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IRADIMED CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>46266A109</ns1:cusip>
    <ns1:figi>BBG006NM92Y1</ns1:figi>
    <ns1:value>2042156</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>21215</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>21215</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JBT MAREL CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>477839104</ns1:cusip>
    <ns1:figi>BBG001SQLKR2</ns1:figi>
    <ns1:value>24859846</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>194415</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>178865</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15550</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JOHNSON &amp; JOHNSON</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>478160104</ns1:cusip>
    <ns1:figi>BBG001S5SHQ9</ns1:figi>
    <ns1:value>454658</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1860</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1860</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>KADANT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>48282T104</ns1:cusip>
    <ns1:figi>BBG001S8PRM8</ns1:figi>
    <ns1:value>61378687</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>209949</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>200424</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9525</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>KARMAN HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COMMON STOCK</ns1:titleOfClass>
    <ns1:cusip>485924104</ns1:cusip>
    <ns1:figi>BBG01RXK1QZ1</ns1:figi>
    <ns1:value>41027306</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>512521</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>492641</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>19880</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LCI INDS</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>50189K103</ns1:cusip>
    <ns1:figi>BBG001S8G4D9</ns1:figi>
    <ns1:value>25112270</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>204198</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>186688</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17510</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LEGENCE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>52476L109</ns1:cusip>
    <ns1:figi>BBG01WRYRR87</ns1:figi>
    <ns1:value>23479456</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>415860</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>404045</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11815</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LEMAITRE VASCULAR INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>525558201</ns1:cusip>
    <ns1:figi>BBG001SK6CX3</ns1:figi>
    <ns1:value>161223689</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1476813</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1420507</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>56306</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LINDE PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS</ns1:titleOfClass>
    <ns1:cusip>G54950103</ns1:cusip>
    <ns1:figi>BBG01FND0CH6</ns1:figi>
    <ns1:value>527984</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1065</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1065</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MAMAS CREATIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>56146T103</ns1:cusip>
    <ns1:figi>BBG001V1FNH5</ns1:figi>
    <ns1:value>2848638</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>185700</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>185700</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MARKEL GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>570535104</ns1:cusip>
    <ns1:figi>BBG001S9ZK95</ns1:figi>
    <ns1:value>277540</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>145</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>145</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MASTERCARD INCORPORATED</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>57636Q104</ns1:cusip>
    <ns1:figi>BBG001SKNNS6</ns1:figi>
    <ns1:value>497162</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>995</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>995</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERCURY SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589378108</ns1:cusip>
    <ns1:figi>BBG001SBFLT8</ns1:figi>
    <ns1:value>139884470</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1918591</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1850266</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>68325</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERIT MED SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589889104</ns1:cusip>
    <ns1:figi>BBG001S6KLT3</ns1:figi>
    <ns1:value>149406671</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2167513</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2062536</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>104977</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MICROSOFT CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>594918104</ns1:cusip>
    <ns1:figi>BBG001S5TD05</ns1:figi>
    <ns1:value>873231</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2359</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2359</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MIRION TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>60471A101</ns1:cusip>
    <ns1:figi>BBG00VHJ1KB3</ns1:figi>
    <ns1:value>34038643</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1831019</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1781539</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>49480</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MONTROSE ENVIRONMENTAL GROUP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>615111101</ns1:cusip>
    <ns1:figi>BBG005Q29V07</ns1:figi>
    <ns1:value>1828143</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>83515</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>83515</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MSA SAFETY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>553498106</ns1:cusip>
    <ns1:figi>BBG001S5TCN2</ns1:figi>
    <ns1:value>108995850</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>664812</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>628810</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>36002</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>N-ABLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COMMON STOCK</ns1:titleOfClass>
    <ns1:cusip>62878D100</ns1:cusip>
    <ns1:figi>BBG00YJKWXF6</ns1:figi>
    <ns1:value>1180459</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>252775</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>252775</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NCINO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>63947X101</ns1:cusip>
    <ns1:figi>BBG014GJ8XJ0</ns1:figi>
    <ns1:value>40810823</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2724354</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2616014</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>108340</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NOVANTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>67000B104</ns1:cusip>
    <ns1:figi>BBG001S6MRJ9</ns1:figi>
    <ns1:value>171237650</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1449815</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1384155</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>65660</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NVIDIA CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>67066G104</ns1:cusip>
    <ns1:figi>BBG001S5TZJ6</ns1:figi>
    <ns1:value>266832</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1530</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1530</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ODDITY TECH LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS CL A</ns1:titleOfClass>
    <ns1:cusip>M7518J104</ns1:cusip>
    <ns1:figi>BBG01H5JVHH4</ns1:figi>
    <ns1:value>1306156</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>97620</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>97620</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ORTHOPEDIATRICS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>68752L100</ns1:cusip>
    <ns1:figi>BBG00HFFRW48</ns1:figi>
    <ns1:value>1024170</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>64535</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>64535</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PALOMAR HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>69753M105</ns1:cusip>
    <ns1:figi>BBG00NLMRYV9</ns1:figi>
    <ns1:value>2465882</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>20635</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>20635</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PLANET LABS PBC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>72703X106</ns1:cusip>
    <ns1:figi>BBG00ZCV3Q27</ns1:figi>
    <ns1:value>523979</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>18747</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>18747</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>POOL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>73278L105</ns1:cusip>
    <ns1:figi>BBG001S5VBK4</ns1:figi>
    <ns1:value>30880414</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>152624</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>141144</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11480</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PROCORE TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74275K108</ns1:cusip>
    <ns1:figi>BBG0026ZJ313</ns1:figi>
    <ns1:value>23214561</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>407273</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>377258</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>30015</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>Q2 HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74736L109</ns1:cusip>
    <ns1:figi>BBG005ZVK9Q1</ns1:figi>
    <ns1:value>84322419</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1782715</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1705245</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>77470</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>RBC BEARINGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>75524B104</ns1:cusip>
    <ns1:figi>BBG001SNYTV1</ns1:figi>
    <ns1:value>233166304</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>429309</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>412124</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17185</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>REPLIGEN CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>759916109</ns1:cusip>
    <ns1:figi>BBG001S5VNT9</ns1:figi>
    <ns1:value>129340793</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1097783</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1047068</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>50715</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROLLINS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>775711104</ns1:cusip>
    <ns1:figi>BBG001S5VRG4</ns1:figi>
    <ns1:value>62915004</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1177963</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1095239</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>82724</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROPER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>776696106</ns1:cusip>
    <ns1:figi>BBG001S9B362</ns1:figi>
    <ns1:value>312105</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>882</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>882</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>S&amp;P GLOBAL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78409V104</ns1:cusip>
    <ns1:figi>BBG001S5T5M8</ns1:figi>
    <ns1:value>646942</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1521</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1521</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SIMPSON MFG INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>829073105</ns1:cusip>
    <ns1:figi>BBG001SB9QN0</ns1:figi>
    <ns1:value>103878373</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>605281</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>570642</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34639</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SITEONE LANDSCAPE SUPPLY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>82982L103</ns1:cusip>
    <ns1:figi>BBG009T22D67</ns1:figi>
    <ns1:value>147312970</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1106701</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1053606</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>53095</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPS COMM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78463M107</ns1:cusip>
    <ns1:figi>BBG001T65R07</ns1:figi>
    <ns1:value>460391</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8270</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8270</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPX TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78473E103</ns1:cusip>
    <ns1:figi>BBG001S5W9N5</ns1:figi>
    <ns1:value>131471147</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>657553</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>627883</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>29670</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STERIS PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS USD</ns1:titleOfClass>
    <ns1:cusip>G8473T100</ns1:cusip>
    <ns1:figi>BBG00MRHG532</ns1:figi>
    <ns1:value>226437</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1024</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1024</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STEVANATO GROUP S P A</ns1:nameOfIssuer>
    <ns1:titleOfClass>ORD SHS</ns1:titleOfClass>
    <ns1:cusip>T9224W109</ns1:cusip>
    <ns1:figi>BBG001V2NPF1</ns1:figi>
    <ns1:value>116761572</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8491751</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8108869</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>382882</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TECSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>878950104</ns1:cusip>
    <ns1:value>1316059</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>66835</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>66835</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRACTOR SUPPLY CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>892356106</ns1:cusip>
    <ns1:figi>BBG001S7K017</ns1:figi>
    <ns1:value>288787</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6375</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6375</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRANSCAT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>893529107</ns1:cusip>
    <ns1:figi>BBG001S5WVW6</ns1:figi>
    <ns1:value>37644447</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>512518</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>498243</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>14275</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TWIST BIOSCIENCE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>90184D100</ns1:cusip>
    <ns1:figi>BBG006KDCHK2</ns1:figi>
    <ns1:value>2698423</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>56785</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>56785</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TYLER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>902252105</ns1:cusip>
    <ns1:figi>BBG001S5WZB0</ns1:figi>
    <ns1:value>39342201</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>114908</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>106283</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8625</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>U S PHYSICAL THERAPY</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>90337L108</ns1:cusip>
    <ns1:figi>BBG001S71ZL9</ns1:figi>
    <ns1:value>1145014</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15275</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15275</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UL SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CLASS A COM SHS</ns1:titleOfClass>
    <ns1:cusip>903731107</ns1:cusip>
    <ns1:figi>BBG007N72MB0</ns1:figi>
    <ns1:value>89961857</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1049607</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1002638</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>46969</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UNIVERSAL TECHNICAL INST INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>913915104</ns1:cusip>
    <ns1:figi>BBG001SC4X67</ns1:figi>
    <ns1:value>46645712</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1292125</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1257235</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34890</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VEEVA SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A COM</ns1:titleOfClass>
    <ns1:cusip>922475108</ns1:cusip>
    <ns1:figi>BBG001TX0CB4</ns1:figi>
    <ns1:value>218170</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1242</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1242</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERICEL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92346J108</ns1:cusip>
    <ns1:figi>BBG001S6X9M3</ns1:figi>
    <ns1:value>79244747</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2463312</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2390302</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>73010</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERISK ANALYTICS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92345Y106</ns1:cusip>
    <ns1:figi>BBG001SBRX64</ns1:figi>
    <ns1:value>629211</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3316</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3316</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VITA COCO CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92846Q107</ns1:cusip>
    <ns1:figi>BBG012QFVTF8</ns1:figi>
    <ns1:value>1421729</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>29675</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>29675</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WASTE CONNECTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>94106B101</ns1:cusip>
    <ns1:figi>BBG001SKJ4K1</ns1:figi>
    <ns1:value>503889</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3102</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3102</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WATSCO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>942622200</ns1:cusip>
    <ns1:figi>BBG001S82CQ2</ns1:figi>
    <ns1:value>44347456</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>121904</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>112879</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9025</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WD 40 CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>929236107</ns1:cusip>
    <ns1:figi>BBG001S5XD46</ns1:figi>
    <ns1:value>38789447</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>190200</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>184444</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>5756</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WEST PHARMACEUTICAL SVSC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>955306105</ns1:cusip>
    <ns1:figi>BBG001S5XK22</ns1:figi>
    <ns1:value>32826321</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>130970</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>120780</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10190</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WILLDAN GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>96924N100</ns1:cusip>
    <ns1:figi>BBG001SNM0H3</ns1:figi>
    <ns1:value>1811946</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>23667</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>23667</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WORKIVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>98139A105</ns1:cusip>
    <ns1:figi>BBG007BVZ8J7</ns1:figi>
    <ns1:value>44993995</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>754553</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>725223</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>29330</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>XYLEM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>98419M100</ns1:cusip>
    <ns1:figi>BBG001V05C73</ns1:figi>
    <ns1:value>324681</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2717</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2717</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
</ns1:informationTable>
